我在循环中找到了一个:
for(var idx in items){
var item = items[idx];
Model.find({'_id': item.id}, function(err, matches){
console.log(item); // Points to the last item in items instead of
// expected item, since find is asynchronous
});
}
如您所见,由于find是异步的,因此我无法获得item
var的可靠引用。
我可以继续并在回调中的匹配对象中在items
数组中再次手动查找它,但这似乎不是一种有效的方法。
如果有任何方法可以将一个对象“附加”到该调用中,那么我可以通过回调来获取它,这将是非常棒的。
有什么想法吗?
答案 0 :(得分:1)
你需要的是一个闭包,因为循环,item
与它一起,将在调用任何回调之前完成。
for(var idx in items){
(function(item){
Model.find({'_id': item.id}, function(err, matches){
console.log(item);
});
})(items[idx]);
}
这应该与以下几乎相同(假设items是一个数组):
items.forEach(function(item){
Model.find({'_id': item.id}, function(err, matches){
console.log(item);
});
})(items[idx]);