【发布时间】:2017-01-31 14:50:26
【问题描述】:
我在 JavaScript forEach 循环中运行了一些异步代码。我想等到异步进程中的代码运行完毕再在循环之后继续。
示例如下:
ids 是一个字符串数组。 db 是我创建的用于 MongoDB 的节点模块
var appIdsNotFound = "";
var count = 0;
ids.forEach(function(id) {
output[count] = {};
//console.log(id);
db.findApp(id, function(error, result) {
if(error) {
fatalError = true;
console.log(error);
} else {
if (result) {
output[count] = result;
//console.log(output[count]);
count++;
} else {
appNotFound = true;
appIdsNotFound += id + ", ";
console.log(appIdsNotFound);
}
}
});
});
//more code that we want to wait before executing
有没有办法在执行循环外的其余代码之前等待,如果是,我将如何去做。
【问题讨论】:
-
你考虑使用Promise吗?用 promise 包装你的异步函数,在错误调用拒绝和成功解决时,然后将所有 promise 对象收集到数组并执行 Promise.all()。
-
我从未使用过承诺。我看到的每个教程都不一样。猜猜是时候学习了。
标签: javascript node.js mongodb loops asynchronous