如何解决循环中的http请求的异步问题

 let paramArr = JSON.parse(paramArray)

    let data = [];

    paramArr.forEach(async (val, i) => {

      let easywlb = dasign ? tqyybm : (tqyybm.substr(0, 2) === '02' ? ('12' + tqyybm.substr(2, 4)) : ('11' + tqyybm.substr(2, 4)));

      let param = { '这是一些参数' };

      await this.post('这是接口', param);

      let result = this.get('data');

      

      for (let item in result) {

        data.push({ 'a': result[item].a, 'b': result[item].b });

      }

    })

    //因为异步现在的data是[]

    ctx.body = { data, success: this.success() }

    

如何解决此过程中多次循环异步操作带来的问题

麻烦详细说下 谢谢


墨色风雨
浏览 1085回答 4
4回答

凤凰求蛊

forEach不适合接收这种回调函数。async函数返回的是Promise,所以你可以用map得到一个Promise的数组。 你可以promises= paramArr.map(async (val, i) => ...。然后使用await Promise.all(promises)。我再看了下你的代码,data.push({ 'a': result[item].a, 'b': result[item].b });在这里的顺序是不确定的,这样的话data的顺序就会有问题了,你或者可以使用for循环放弃并发请求,或者可以最后对data进行排序获得和原来一样的顺序(每次push的时候同时存入索引i,用来排序)。当然如果data.push不立即处理,而是让Promise返回结果,那么Promise.all就是有序的,然后再存放到data里。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript