我已经在这上面待了几个小时,似乎无法找到答案。 问题是我在for循环中调用了mongoDB。我使用了一个闩锁,所以等待呼叫结束然后再次前进。这是我的代码:
var latch = true;
for (var i=0; i<array.length; i++) {
while(latch == false){}
Table1.find({}, function(err, result){
... some code ...
latch = true;
});
latch = false;
}
问题是它甚至没有从Table1.find()运行回调,它只是被阻止了。 任何人都可以帮我这个吗?
答案 0 :(得分:4)
for循环永远不会经过while循环(因为你创建了一个无限循环)。
有几种方法可以处理节点循环中的异步代码,包括函数外部的计数器变量和尾递归。你可以在这里看到一些例子: http://metaduck.com/01-asynchronous-iteration-patterns.html
我是https://github.com/caolan/async的忠实粉丝,它提供了一个async.each,它将迭代器并行应用于每个元素。这可能适合您的目的。