在这里,我需要两次从数据库中获取数据,并将结果作为响应返回。
但是我的问题是从数据库中获取数据之前,调用了响应函数,它将返回空响应
这是我的代码:
Stages.findById(comp.currentStage.stage, function(stgErr, stageName) {
if (stgErr) {
res.json(HttpStatus.INTERNAL_SERVER_ERROR, usrErr);
return;
}
comp.currentStageName = stageName.name;
components.push(comp);
ServiceProviderUser.findById(comp.currentStage.user, function(
usrErr,
userName
) {
if (usrErr) {
res.json(HttpStatus.INTERNAL_SERVER_ERROR, usrErr);
return;
}
comp.personResponsible = userName.firstName + " " + userName.lastName;
components.push(comp);
console.log("1111111111", comp);
});
checkCondition(); //check condition is the function for response send
});
function checkCondition() {
res.json(HttpStatus.OK, components);
}
答案 0 :(得分:0)
只需在发送数据库调用的回调中移动返回函数调用
Stages.findById(comp.currentStage.stage, function (stgErr, stageName){
if (stgErr) {
res.json(HttpStatus.INTERNAL_SERVER_ERROR, usrErr);
return;
}
comp.currentStageName = stageName.name;
components.push(comp);
ServiceProviderUser.findById(comp.currentStage.user, function (usrErr, userName){
if (usrErr) {
res.json(HttpStatus.INTERNAL_SERVER_ERROR, usrErr);
return;
}
comp.personResponsible = userName.firstName+ ' '+userName.lastName;
components.push(comp);
console.log("1111111111",comp);
checkCondition() //moved in callback of this DB call
})
})
function checkCondition() {
res.json(HttpStatus.OK, components);
}
但这不是一个好方法。您可以使用“ Promises”更好地处理异步代码。 我发现this是对诺言的最好解释。希望能帮助到你 !!