我出于某种原因看到最后一次回调命中,即使它确实进入了第一个if语句。如果我做出回应(res),它不应该首先返回吗?嗯,不是。由于某种原因,它仍然继续并且击中第二个响应(res):
function find(response){
var res = {};
res.statusCode = 200;
var data = _gateway.find();
if(!data){
res.statusCode = 204;
res.body = null;
console.log("SETTING RESPONSE BODY TO NULL");
response(res);
}
console.log("SHHHHHHHHHHHHHOULD NOT GET HERE");
res.body = data;
response(res);
};
答案 0 :(得分:3)
调用回调并不意味着当前函数将在此时停止执行。它与调用其他函数相同。在您的情况下,一旦回调函数返回一个值,控件就会转移到find
函数,并继续执行其余的语句。
要解决此问题,您需要在回调返回后立即从find
返回,如下所示
...
if(!data){
res.statusCode = 204;
res.body = null;
console.log("SETTING RESPONSE BODY TO NULL");
response(res);
return; // return from the `find` function
}
...
您甚至可以返回response
的结果,就像这样
return response(res);
以便控件将立即从find
函数传输。
答案 1 :(得分:0)
在响应(res)之后放入return语句,否则它将尝试执行剩余的语句或将其放入else部分。