簡體   English   中英

使用mongodb操作運行for-in循環

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM