使用mongodb操作运行for-in循环

我有这样的function…

for(key in object){ db.collection.findOne(criteria, function(err, doc){ // ... db.collection.update(...); }) }; 

然而,在mongodb调用之前的关键变化的值是完整的,即循环进入下一次迭代。 有没有办法做到这一点顺序。 或者有像async.map()这样的对象的数组?

所有对你的callback的调用都会在循环的所有迭代发生之后发生,所以当它们被执行时, key的值将是最后一个值。

一个常见的解决scheme是将所有的呼叫都封装在闭包中:

 for(key in object){ (function(key, value) { db.collection.findOne(criteria, function(err, doc){ // ... db.collection.insert(...); }) })(key, object[key]); }; 

另一种可以实现同样效果的方法是使用Object.keys()方法(在对象中创build一个数组),并在数组上调用Array#forEach 。 这样你可以跳过额外的closures,因为forEach已经有一个函数callback:

 Object.keys(object).forEach(function(key) { db.collection.findOne(criteria, function(err, doc){ // ... db.collection.update(...); }) }); 

这可以说是更优雅一点

你可以build立一个闭包来保存键的值

 for(key in object){ (function(ky) { db.collection.findOne(criteria, function(err, doc){ // ... db.collection.insert(...); }) })(key) };