forEach is not suitable for receiving such callback functions. The
async function returns Promise , so you can use map to get an array of Promise. You can promises= paramArr.map (async (val, i) = >. .
then use await Promise.all (promises) .
< hr >
I looked at your code again, data.push ({'asides: result [item] .a, 'baked: result [item] .b}); The order of here is uncertain, so there will be a problem with the order of data. You can either use the for loop to abandon concurrent requests, or you can finally sort data to get the same order as the original (index I is stored in the index I every time you push).
< hr >
of course, if data.push does not process immediately, but lets Promise return the result, then Promise.all is ordered and then stored in data.
const { EventEmitter } = require('events');
var event = new EventEmitter();
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 });
}
event.emit('loaded');
});
//data[]
var count = 0;
event.on('loaded', function() {
if (PPcount === paramArr.length) {
event.emit('finish');
}
});
event.on('finish', function() {
ctx.body = { data, success: this.success() };
})
event monitoring style
const paramArr = JSON.parse(paramArray).map(async(val)=>{
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');
const map = [];
for (let item in result) {
map.push({ 'a': result[item].a, 'b': result[item].b });
}
return map;
});
const data = await Promise.all(paramArr);
Don't use forEach, to directly for the loop, and it's not necessary. Asnyc/await, since the this.post method is promise, just call promise directly
let paramArr = JSON.parse(paramArray)
let data = [];
let promiseArr = paramArr.map(val=>{
let easywlb = dasign ? tqyybm : (tqyybm.substr(0, 2) === '02' ? ('12' + tqyybm.substr(2, 4)) : ('11' + tqyybm.substr(2, 4)));
let param = { '' };
return this.post('', param).then(()=>{
let result = this.get('data');
return result.map(n=>return {a:n.a, b:n.b}))
})
});
promise.all(promiseArr)
.then((resultArr)=>ctx.body = { data: data.reduce((p,c)=>[p.concat(c), p][1],[]), success: this.success() })
.catch(err=>console.log(err))