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里。
添加回答
举报
0/150
提交
取消