【发布时间】:2015-07-18 08:00:24
【问题描述】:
假设我有以下 for 循环
for(var i = 0; i < array.length; i++){
Model.findOne({ _id = array[i].id}, function(err, found){
//Some stuff
});
}
如何使这段代码工作?每次运行它我都会得到array[i] = undefined因为mongo-db 查询是异步的,并且在第一个查询完成时循环已经迭代了5 次。我该如何解决这个问题并等待查询完成后再进行下一次迭代?
【问题讨论】:
-
通过分配给另一个变量使其同步。 var result = Model.findOne({ _id = array[i].id}, function(err, found){ //一些东西 });
-
如果您使用
Array.prototype.forEach,则item在回调中与在其外部相同。或者,如果您使用 --harmony 标志,并将var i替换为let i,它也可以工作。但是对于这两种解决方案,我怀疑您还会遇到更多问题。
标签: node.js mongodb asynchronous promise synchronous