最近工作中遇到一个问题。
一个用户列表,在获取到后台返回的信息之后,还需要去单独查询每个用户的另外两条信息,并合并到原来的数组中。
一开始,我是这样写的。
data.forEach((item, index) => {
Promise.all([this.xx(item.userId), this.xx(item.userId)]).then(resArr => {
if (resArr && resArr.length) {
data[index] = Object.assign(data[index], ...resArr)
if (index=== data.length-1) {
this.setData({
userList: [...this.data.userList, ...data]
})
}
}
})
})
最后发现每次我获取列表的时候,返回的关于另外两条额外获取的信息结果都是不一样的,debugger之后发现原来循环里面的每个promise返回结果的速度都不一样,导致Index也是一直在变化的,因此不能根据Index来判断是否已经循环完成,只能把代码改成如下
let count = 0
data.forEach((item, index) => {
Promise.all([this.xx(item.userId), this.xx(item.userId)]).then(resArr => {
count++
if (resArr && resArr.length) {
data[index] = Object.assign(data[index], ...resArr)
if (count === data.length) {
this.setData({
userList: [...this.data.userList, ...data]
})
}
}
})
})
增加一个count变量手动计数,来判断是否已经执行完。
以上。
网友评论