node.js以同步方式执行循环

时间:2014-02-25 13:54:21

标签: node.js asynchronous

我必须在node.js中实现一个程序,它看起来像下面的代码片段。它有一个数组,我必须遍历并匹配数据库表条目的值。我需要等到循环结束并将结果发送回调用函数:

var arr=[];
arr=[one,two,three,four,five];

for(int j=0;j<arr.length;j++) {

   var str="/^"+arr[j]+"/";

   // consider collection  to be a variable to point to a database table

   collection.find({value:str}).toArray(function getResult(err, result) {
     //do something incase a mathc is found in the database...
   });

}

但是,由于str="/^"+arr[j]+"/";(实际上是为了查找部分匹配而传递查找MongoDB函数的正则表达式)在find函数之前异步执行,我无法遍历数组并获取要求的输出。

另外,我很难遍历数组并将结果发送回调用函数,因为我不知道循环何时完成执行。

1 个答案:

答案 0 :(得分:4)

尝试使用异步each。这将允许您遍历数组并执行异步函数。 Async是一个很棒的库,它为许多常见的异步模式和问题提供解决方案和帮助。

https://github.com/caolan/async#each

这样的事情:

var arr=[];
arr=[one,two,three,four,five];

asych.each(arr, function (item, callback) {
  var str="/^"+item+"/";
  // consider collection  to be a variable to point to a database table
  collection.find({value:str}).toArray(function getResult(err, result) {
    if (err) { return callback(err); }
    // do something incase a mathc is found in the database...
    // whatever logic you want to do on result should go here, then execute callback
    // to indicate that this iteration is complete
    callback(null);
  });
} function (error) {
  // At this point, the each loop is done and you can continue processing here
  // Be sure to check for errors!
})