[英]Running for-in loop with mongodb operations
我有这样的功能......
for(key in object){
db.collection.findOne(criteria, function(err, doc){
// ...
db.collection.update(...);
})
};
但是,在mongodb调用之前键的值发生变化,即循环进入下一次迭代。 有没有办法按顺序进行。 或者是否有像async.map()
这样的对象用于数组?
在回调的所有迭代发生之后,所有对回调的调用都会发生,所以当它们被执行时, key
的值将是它的最后一个值。
一个常见的解决方案是将所有调用包装在一个闭包中:
for(key in object){
(function(key, value) {
db.collection.findOne(criteria, function(err, doc){
// ...
db.collection.insert(...);
})
})(key, object[key]);
};
另一种可以实现相同目的的方法是使用Object.keys()
方法(从对象中的键创建一个数组)并在数组上调用Array#forEach
。 这样你就可以跳过额外的闭包,因为forEach已经有一个函数回调:
Object.keys(object).forEach(function(key) {
db.collection.findOne(criteria, function(err, doc){
// ...
db.collection.update(...);
})
});
这可以说有点优雅
您可以构建一个闭包来保存key的值
for(key in object){
(function(ky) {
db.collection.findOne(criteria, function(err, doc){
// ...
db.collection.insert(...);
})
})(key)
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.