为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

墨色风雨 2019-03-21 22:19:37
 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() }    如何解决此过程中多次循环异步操作带来的问题麻烦详细说下 谢谢
查看完整描述

4 回答

?
凤凰求蛊

TA贡献1825条经验 获得超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里。


查看完整回答
反对 回复 2019-04-08
  • 4 回答
  • 0 关注
  • 1084 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信