我必须在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函数之前异步执行,我无法遍历数组并获取要求的输出。
另外,我很难遍历数组并将结果发送回调用函数,因为我不知道循环何时完成执行。
答案 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!
})