簡體   English   中英

如何在Node.js中獲取async.each的結果

[英]How to get the result of async.each in Node.js

我正在嘗試填充outputArray,然后將其作為JSON發送。 當我在outputArray.push之后添加console.log() ,我可以看到outputArray正在被填充。 但是在底部函數中,它會打印一個空數組。 我看到底部函數在數組被填充之前起作用。 如何修改下面的代碼,以便可以接收完整的數組。 提前致謝。

      var outputArray = [];

      async.each(generalArr, function(item, callback)
      {
          var docs =  collection.find({ id: { "$in": item}}).toArray();


        docs.then(function(singleDoc)
        {
          if(singleDoc)
          {


              outputArray.push.apply(outputArray, singleDoc);
          }
        });
        callback(null, outputArray);

    }, function(err,results)
      {
      if (err) 
        return console.log('ERROR', err);

      console.log(results);
      res.json(results);


      }
  ) 

代碼中有兩個錯誤。

  1. 您在錯誤的地方調用了callback(null, outputArray) 它應該是最里面之后if條件
  2. async.each最后的回調僅接受一個參數err ,因此results不可用

下面的代碼應該工作...

var outputArray = [];

async.each(generalArr, function(item, callback) {
    var docs =  collection.find({ id: { "$in": item}}).toArray();
    docs.then(function(singleDoc) {
        if(singleDoc) {
            outputArray.push.apply(outputArray, singleDoc);
        }
        callback();
    });
}, function(err) {
    if (err) return console.log('ERROR', err);

    console.log(outputArray);
    res.json(outputArray);
});

我假設DB Promise查詢也有catch代碼,否則最終的回調可能永遠不會被調用。

當簡單的承諾要容易得多時,請不要使用async.js:

Promise.all(generalArr.map(function(item) {
  return collection.find({id: {"$in": item}}).toArray();
})).then(function(outputArray) {
  var results = outputArray.filter(Boolean);
  console.log(results);
  res.json(results);
}, function(err) {
  console.log('ERROR', err);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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