2017-04-11 36 views
0

我的目標是將記錄保存在異步foreach循環中的mongoDB集合中。以下是自行說明的代碼。在async foreach循環中使用collection.save()在節點js中未調用回調

async.forEach(data, function(item, callback) { 
     var object = new Collection_Object(); 

     // errorLog.push(sdb); 
     object.save(function(error) { 
     count++; 
     console.log(count); 
     if(error) { 
      console.log("inside error"); 
      count--; 
     } 
     //callback(); 
     }); 
     callback(); 
    }, function() { 
    //This is the block which should be called after foreach. 
     res.json(data); 
    }); 

現在正在發生的事情是流動跳過save部分,直接跳到應該forEach後,被稱爲塊。

如果我評論save部分,如預期的那樣,回調工作正常。 我不明白我在做什麼錯誤。可能是collection.save()不是這樣的。 請指導。

+0

可能DUP問題:http://stackoverflow.com/questions/10390041/node-js-using -the-async-lib-async-foreach-with-object – funcoding

+2

爲什麼你在save()中調用callback()函數?這正是它應該被調用的地方。 –

+0

我想,我一直忘記取消註釋下面的回調()函數。有效。愚蠢的我。 –

回答

1

object.save()也是異步,所以你必須使用回調函數與保存方法,如:

object.save(function(error) { 
     count++; 
     console.log(count); 
     if(error) { 
      console.log("inside error"); 
      count--; 
     } 
     callback(); 
     }); 
+0

它應該在傳遞給'save()'的回調中,而不是作爲單獨的參數傳遞。 – robertklep

+0

哦,你是對的! – Alessandro