Mongoose发现参考对象

时间:2013-09-10 15:06:13

标签: node.js mongoose

我在循环中找到了一个:

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数组中再次手动查找它,但这似乎不是一种有效的方法。

如果有任何方法可以将一个对象“附加”到该调用中,那么我可以通过回调来获取它,这将是非常棒的。

有什么想法吗?

1 个答案:

答案 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]);