我正在编写一个API端点,用于计算过去7天内每天的用户总收入。
我使用mongoose .find({})方法查询数据库8次。在所有8个.find({})调用返回后,我想向客户端发送响应。我应该使用调用下一个.find({})的.then函数链接所有.find({})调用,还是有更简单的方法等待所有查询完成?
为了简洁起见,这是我的路线看起来减去了一些.find({})调用:
Set HADOOP_HOME to BigInsights_Install_Directory/hadoop.
For example, /usr/iop/4.0.0.0/hadoop.
答案 0 :(得分:0)
您可以使用async包。
示例:
async.parallel([
function(callback){ ... },
function(callback){ ... }
], function(err, results) {
// optional callback
};
在你的情况下:
async.parallel([
function(callback){
Sale
.find({ owner: req.params.userId, created_at: {$gte: sevenDaysAgo, $lt: sixDaysAgo} })
.exec(function(err, sales) {
if (err) { return callback(err); } //check for error
sales.map(sale => {
sevenDaysAgoRevenue += sale.total;
});
callback();
});
},
function(callback){
Sale
.find({ owner: req.params.userId, created_at: {$gte: sixDaysAgo, $lt: fiveDaysAgo} })
.exec(function(err, sales) {
if (err) { return callback(err); } //check for error
sales.map(sale => {
sixDaysAgoRevenue += sale.total;
});
callback();
});
}
], function(err, results) {
var dataRowsForWeeksRevenue = [
[new Date(sevenDaysAgo), sevenDaysAgoRevenue],
[new Date(sixDaysAgo), sixDaysAgoRevenue],
[new Date(fiveDaysAgo), fiveDaysAgoRevenue],
[new Date(fourDaysAgo), fourDaysAgoRevenue],
[new Date(threeDaysAgo), threeDaysAgoRevenue],
[new Date(twoDaysAgo), twoDaysAgoRevenue],
[new Date(oneDayAgo), oneDayAgoRevenue],
[new Date(), todaysRevenue]
];
res.status(200).json(dataRowsForWeeksRevenue);
};