美文网首页
关于for循环里面使用promise.all的异步问题

关于for循环里面使用promise.all的异步问题

作者: szagnesc | 来源:发表于2019-11-26 16:23 被阅读0次

    最近工作中遇到一个问题。

    一个用户列表,在获取到后台返回的信息之后,还需要去单独查询每个用户的另外两条信息,并合并到原来的数组中。

    一开始,我是这样写的。

    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变量手动计数,来判断是否已经执行完。

    以上。

    相关文章

      网友评论

          本文标题:关于for循环里面使用promise.all的异步问题

          本文链接:https://www.haomeiwen.com/subject/bpqywctx.html