微信小程序想要查询数据库内部的所有数据进行显示,使用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条数据,但是这边就是相反的,得到的数据结果也是反的
不建议for循环中执行异步操作。
你可以试试这样
let arr = [] this.data.times.forEach(item=>{ let promise = new Promise((reslove,reject)=>{ ..... relsove(data) }) arr.push(promise) }) Promise.all(arr).then(res=>{ ...... })
真没看懂,你上面知道async await ,for里面就不会async await了?