一直在努力,所以我想如果有人有快速回答的话。一直试图让异步工作做并行调用,并设法做到这一点(感谢其他人:))。
但是,我现在遇到的问题是我需要将一个变量发送到回调函数中。基本上,我试图使用mongoose向数据库发出五个请求,以在表中找到0-5级。
设置一个从0到4迭代的for循环,每个循环生成一个queries.push。完成该循环后,它会调用async.parallel等待回复。所有这些都有效,除了读取i,其中包含0-4之间的数字。起初我以为我可以通过在闭包中添加(i)来发送它。但是这会调用async.parallel(认为它找到它并将其识别为不是函数)。 认为bind是答案,但不确定我应该绑定到什么。
console.log("Lets see if we can't figure out this one once and for all");
var queries= [];
var maxLevels = 1;
for ( var i = 0; i < maxLevels; i++ ){
console.log("Looking for "+ i)
queries.push(function (cb) {
console.log("Seaching for "+ i)
Skill.find({level: i}).exec(function (err, docs) {
if (err) {
throw cb(err);
}
// do some stuff with docs & pass or directly pass it
cb(null, docs);
});
});
}
console.log("In theory we now have 5 requests");
async.parallel(queries, function(err, docs) {
// if any query fails
if (err) {
throw err;
}
console.log("This is what we got back")
for (var doc in docs){
console.log("Lets find 0")
cuDoc = docs
if (cuDoc === undefined ){
console.log("Got nothing on "+ cuDoc);
} else {
console.log("Looking at " + cuDoc);
}
}
})
答案 0 :(得分:1)
为什么不使用find({level: { $gte: 0, $lte: 5 }})
之类的内容?如果您希望查询仅匹配整数,则可以使用{$in: [0,1,2,3,4,5]}
。
无论如何,我会使用async.each,这似乎更适合使用索引,如下所示:
var array = ['level 0', 'level 1', 'level 2', 'level 3', 'level 4'];
async.each(array, function(element, callback){
console.log("element : "+ element);
console.log("array.indexOf(element) : "+array.indexOf(element));
/* query here */
callback();
},function(){
/* stuff there */
console.log("done");
})
这是控制台:
debugger listening on port 47025
element : level 0
array.indexOf(element) : 0
element : level 1
array.indexOf(element) : 1
element : level 2
array.indexOf(element) : 2
element : level 3
array.indexOf(element) : 3
element : level 4
array.indexOf(element) : 4
done