[英]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.