Mongoose find()使用锁存器调用for循环

时间:2015-07-08 22:02:21

标签: javascript node.js mongodb express

我已经在这上面待了几个小时,似乎无法找到答案。 问题是我在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()运行回调,它只是被阻止了。 任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:4)

for循环永远不会经过while循环(因为你创建了一个无限循环)。

有几种方法可以处理节点循环中的异步代码,包括函数外部的计数器变量和尾递归。你可以在这里看到一些例子: http://metaduck.com/01-asynchronous-iteration-patterns.html

我是https://github.com/caolan/async的忠实粉丝,它提供了一个async.each,它将迭代器并行应用于每个元素。这可能适合您的目的。