收藏
回答

两个集合做联合查询问题

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 需求 客户端 wxf71c1814570ae563 2.6.2

- 需求的场景描述(希望解决的问题)

如下是代码,在一个for循环中 为什么没有顺序打印j的值,而是在前边j循环打印完0,1 然后才执行下边的代码,而且后边的打印为什么是1,0?



if (e.currentTarget.dataset.index == 1){

var arry_share_record = new Array()

var arry_share_record_title = new Array()

var arry_share_record_process = new Array()

const db = wx.cloud.database({

env: 'test-240128'

})

//查询分享记录

db.collection('process_information_col').where({

process_chain: db.RegExp({

regexp: user_openid,

options:'i'

})

}).get().then(res => {

var arry_length = res.data.length

var arry_process_nodef = new Array()

var that=this

console.log('res.data.pro:',res.data)

for (let j = 0; j < arry_length;j++){

console.log('j001:',j)

arry_share_record_process = res.data[j].process_chain.split(";");

// for (let arry_process_num = 0; arry_process_num < arry_share_record_process.length-1; arry_process_num++){

//   console.log('arry_process_num:', arry_process_num)

//   arry_process_nodef[arry_process_num] = arry_share_record_process[arry_process_num+1]

//   console.log('arry_process_nodef:', arry_process_nodef[arry_process_num])

// }                  

db.collection('release_content_col').where({

_id: res.data[j].id_release_information

}).get().then(

res => {

// console.log('arry_process_nodef:', arry_process_nodef)      

// console.log('res.data.rel:', res.data)                  

arry_share_record[j] = res.data[0]

console.log('j002:', j)

if (j == arry_length-1){

setTimeout(function () {

console.log('arry_share_record', arry_share_record[0])

that.setData({

shareRecordData: arry_share_record

})

}, 1000) //延迟时间 这里是1秒

}

}).catch(err => {

console.log('[查询失败]')

})

}

}).catch(err => {

console.log('[查询失败]')

})

}



- 希望提供的能力


回答关注问题邀请回答
收藏

1 个回答

  • \
    \
    2019-05-23

    你这里的arry_length是在前面这里(var arry_length = res.data.length)定义的,里面用let 改下试试,说不定是作用域问题,函数嵌套太多层可能会有偏差

    2019-05-23
    赞同
    回复 5
    • @GOD
      @GOD
      2019-05-23

      我把 变量都声明成let了 但是还是不行




      if (e.currentTarget.dataset.index == 1){

      let arry_share_record = new Array()

      let arry_share_record_title = new Array()

      let arry_share_record_process = new Array()

      const db = wx.cloud.database({

      env: 'test-240128'

      })

      //查询分享记录

      db.collection('process_information_col').where({

      process_chain: db.RegExp({

      regexp: user_openid,

      options:'i'

      })

      }).get().then(res => {

      let arry_length = res.data.length

      let arry_process_nodef = new Array()

      let that=this

      console.log('res.data.pro:',res.data)

      for (let j = 0; j < arry_length;j++){

      console.log('j001:',j)

      arry_share_record_process = res.data[j].process_chain.split(";");

      for (let arry_process_num = 0; arry_process_num < arry_share_record_process.length-1; arry_process_num++){

      // console.log('arry_process_num:', arry_process_num)

      arry_process_nodef[arry_process_num] = arry_share_record_process[arry_process_num+1]

      // console.log('arry_process_nodef:', arry_process_nodef[arry_process_num])

      }

      // console.log('arry_process_nodef:', arry_process_nodef)                

      db.collection('release_content_col').where({

      _id: res.data[j].id_release_information

      }).get().then(

      res => {

      // console.log('arry_process_nodef:', arry_process_nodef)      

      // console.log('res.data.rel:', res.data)                  

      arry_share_record[j] = res.data[0]

      console.log('j002:', j)

      if (j == arry_length-1){

      setTimeout(function () {

      console.log('arry_share_record', arry_share_record[0])

      that.setData({

      shareRecordData: arry_share_record

      })

      }, 1000) //延迟时间 这里是1秒

      }

      }).catch(err => {

      console.log('[查询失败]')

      })

      }

      }).catch(err => {

      console.log('[查询失败]')

      })

      }


      2019-05-23
      回复
    • @GOD
      @GOD
      2019-05-23回复@GOD

      另外 如果我不用这种嵌套的方式联合查询两个集合,那应该咋实现

      2019-05-23
      回复
    • \
      \
      2019-05-26

      可以试试云函数哦

      2019-05-26
      回复
    • 鹏
      2019-07-11回复\
      用云函数怎么实现集合联合查询?求教
      2019-07-11
      1
      回复
    • \
      \
      2019-07-11
      新版开发者工具里面有测试查询语句的地方,里面有测试用的模板,你可以看下那里面有没有,然后写法云函数和小程序端差不多,一个是异步回调,看下文档。
      2019-07-11
      回复
登录 后发表内容