我正在尝试填充outputArray,然后将其作为JSON发送。当我在console.log()之后添加outputArray.push时,我可以看到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);


      }
  )

最佳答案

代码中有两个错误。


您在错误的位置拨打callback(null, outputArray)。应该在最里面的if条件之后
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);
});


我假设catch代码也存在于数据库promise查询中,否则最终的回调可能永远不会被调用。

10-08 11:02