我在循环中找到了:
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
通过回调内的匹配对象在数组中手动查找它,但这似乎并不是一种有效的方法。
如果有任何方法可以将对象“附加”到调用中,那么我可以通过很棒的回调将其取回。
有任何想法吗 ?
您需要的是一个闭包,因为循环以及item
随之而来的闭包将在调用任何回调之前完成。
for(var idx in items){
(function(item){
Model.find({'_id': item.id}, function(err, matches){
console.log(item);
});
})(items[idx]);
}
这应该与以下内容大致相同(假设项目是一个数组):
items.forEach(function(item){
Model.find({'_id': item.id}, function(err, matches){
console.log(item);
});
})(items[idx]);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句