gpt4 book ai didi

javascript - 如何在 Node.js 中获取 async.each 的结果

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:51 25 4
gpt4 key购买 nike

我正在尝试填充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 代码,否则最终的回调可能永远不会被调用。

关于javascript - 如何在 Node.js 中获取 async.each 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45298394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com