收藏
回答

数据库数据for循环获取错误怎么解决?

微信小程序想要查询数据库内部的所有数据进行显示,使用count()、total 算出总数后在算出需要循环的次数,但是使用for循环获取数据时出现时序问题!!
 /*  查询数据库中的数据信息 */
  find_all: async function () {
    let that = this  //建议小白以后都这样做,不然真的会出现一些弱智的问题,懂得都懂。。
    const db = wx.cloud.database();
    const c = db.collection("user"); //获取集合中记录的总数
    var total = await (await c.count()).total
    const batchTimes = Math.ceil(total / 20)
    console.log("total   "+total) 
    console.log("batchTimes   "+batchTimes)  //计算需要获取几次  比如你有36条数据就要获取两次 第一次20条第二次16条
    await this.setData({
      times : batchTimes,
      list:[],
      flag: 0,
    },()=>{
      for (let i = 0; i < this.data.times;i++) {
      db.collection('user').limit(20).skip(i*20)
      .get()
      .then(res=>{ 
        console.log(res.data) 
          this.setData({
            list:res.data.reverse().concat(this.data.list),
          })
 
        }) 
      }
  })  


},

应该先查询前20条,在查询剩下的19条数据,但是这边就是相反的,得到的数据结果也是反的

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

2 个回答

  • Senior
    Senior
    2023-01-18

    不建议for循环中执行异步操作。

    你可以试试这样

    let arr = []
    this.data.times.forEach(item=>{
       let promise = new Promise((reslove,reject)=>{
               .....
               relsove(data)   
       })
       arr.push(promise)   
     })
    
    Promise.all(arr).then(res=>{
      ......
    })
    
    2023-01-18
    有用
    回复
  • Mr.Zhao
    Mr.Zhao
    2023-01-18

    真没看懂,你上面知道async await ,for里面就不会async await了?

    2023-01-18
    有用
    回复
登录 后发表内容