使用Promise.all解决nodejs中for循环执行异步函数问题
在for循环中执行nodejs的异步函数,常常会遇到需要获取异步结果才能进行下一步的情况,那么就需要对这种问题进行解决,下面使用Promise.all解决该问题
代码:
for(let oid of oids){
//每一次异步执行的返回值为Promise,存储到Promise数组中
let promise = ModelDoc.findOne({oid:oid}).exec();
promises.push(promise);
}
//执行所有的Promise
const p = Promise.all(promises);//取得所有查询结果
//所有Promise执行完成后,再执行下面的结果,从结果中依次获取需要的信息
p.then((docs) => {
for(let doc_item of docs){
//将异步任务中获取到的结果值存入paths数组中
paths.push(doc_item.path);
}
})
//获取所有的异步结果值后,执行接下来的代码,代码放到.then中执行
p.then(() => {
const ls = spawn(config.invokeExe, paths);
...
})
通过Promise.all即可实现对nodejs中for循环执行异步函数的问题,使得获取所有异步函数结果值之后,执行需要的代码