如何在 Node 的异步 eachSeries 中正确获取结果数组?
How to properly get result array in async eachSeries for Node?
我正在尝试使用异步 eachSeries
来编码 每个类别的报告计数是多少。 Categories 和 Reports 并存储在单独的集合中,然后我首先获取可用的类别并对它们执行计数搜索。
这是我的代码:
Category.find({},{_id:0, name: 1}, function (err, foundCategories) {
async.eachSeries(foundCategories,
function (item,callback) {
Report.count({category: item.name}, function (err,count) {
var name = item.name;
console.log(count);
return callback(null,{name: count});
});
}
,function (err, results) {
if (err)
response.send(err);
response.send(JSON.stringify(results));
});
});
问题是我什么也没收到,console.log
在那里输出实际数字,我做错了什么?
eachSeries
的 API 不向最终回调提供任何结果 - 仅在失败情况下提供错误。在成功案例中,它只是一个纯控制流 "eachSeries is done" 指示器,但不提供从 worker 函数传递值的机制。 mapSeries 确实提供了您需要的功能。
与 Peter 的回答类似,async.waterfall 为您提供函数的瀑布执行,同时将 return 值传递给瀑布链中的下一个异步函数。
我正在尝试使用异步 eachSeries
来编码 每个类别的报告计数是多少。 Categories 和 Reports 并存储在单独的集合中,然后我首先获取可用的类别并对它们执行计数搜索。
这是我的代码:
Category.find({},{_id:0, name: 1}, function (err, foundCategories) {
async.eachSeries(foundCategories,
function (item,callback) {
Report.count({category: item.name}, function (err,count) {
var name = item.name;
console.log(count);
return callback(null,{name: count});
});
}
,function (err, results) {
if (err)
response.send(err);
response.send(JSON.stringify(results));
});
});
问题是我什么也没收到,console.log
在那里输出实际数字,我做错了什么?
eachSeries
的 API 不向最终回调提供任何结果 - 仅在失败情况下提供错误。在成功案例中,它只是一个纯控制流 "eachSeries is done" 指示器,但不提供从 worker 函数传递值的机制。 mapSeries 确实提供了您需要的功能。
与 Peter 的回答类似,async.waterfall 为您提供函数的瀑布执行,同时将 return 值传递给瀑布链中的下一个异步函数。