[英]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);
}
)
代碼中有兩個錯誤。
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);
});
我假設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.