我正在尝试异步执行多个Model.count()
mongoose查询。但是,我希望能够停止并返回以防任何这些查询返回错误。这是我的代码:
var User = require('../models/user').model;
module.exports = {
getStatistics: function(req, res) {
var response = {};
User.count({}, function(err, count) {
if(err || !count) res.status(500).json({error: 'unknown error'});
response.total_count = count;
});
User.count({platform: 'iOS'}, function(err, ios) {
if(err || !ios) res.status(500).json({error: 'unknown error'});
response.ios_count = ios;
});
User.count({platform: 'Android'}, function(err, android) {
if(err || !android) res.status(500).json({error: 'unknown error'});
response.android_count = android;
});
res.return(200).json(response);
}
}
但是,我收到Error: Can't set headers after they are sent
错误。有没有办法做到这一点,还是我必须同步运行它们?
答案 0 :(得分:2)
在每个回调function(err, data)
中调用第2和第3个函数:
User.count({}, function(err, count) {
if(err || !count) res.status(500).json({error: 'unknown error'});
response.total_count = count;
// Call your 2nd function.
User.count(..} // and so on.
});
你也可以使用mongoose promises,然后用下一个链接它们。
User.count({}).exec()
.then((data) => {
// 2nd function.
return User.count({...});
})
.then((...) => {...} // and so on.
修改强>
Error: Can't set headers after they are sent
您收到此错误的原因是您向用户发送了最多4个回复,来自您的并行请求(3个来自可能的if(error ||
)。
您还应该确保return
每res
{}},否则它会继续处理您的请求,即使它属于您的错误条件。