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