美文网首页
关于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的异步问题

    最近工作中遇到一个问题。 一个用户列表,在获取到后台返回的信息之后,还需要去单独查询每个用户的另外两条信息,并合并...

  • await 与 Promise.all 结合使用

    当遇到多个可以同时执行的异步任务时,就需要使用 Promise.all。 Promise.all 方法用于将多个 ...

  • ES6--Promise

    Promise解决异步回调的问题 Promise.all和Promise.race

  • 2018-12-06 解决多异步请求,和树结构扁平化

    1.解决for循环发异步请求,并确定全部请求返回后 开始回调 Promise.all(reqs).then(fun...

  • Promise.all 方法的实现

    promise.all解决异步并发问题的,允许我们按照异步代码的调用顺序得到异步代码的执行结果。all方法是静态方法,

  • Promise对象

    Promise 多个异步回调: 详情关于promise对象的一些讲解 Promise.all() .catch()用法

  • for循环里面异步操作

      首先来看一个比较简单的问题,我们想实现的每隔1s输出下列数组的值,看下错误写法:   会在1s后同时输出1、2...

  • js多个异步请求,按顺序执行next

    在js里面,偶尔会遇见需要多个异步按照顺序执行请求,又不想多层嵌套,,这里和promise.all的区别在于,pr...

  • promise的理解

    promise是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作); Promise.all() P...

  • ES6-Promise

    构建Promise,异步实例 处理多个Promise实例 — Promise.all() 处理多个Promise实...

网友评论

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

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