出于某种原因,我看到了最后一个回调命中,即使它确实进入了第一个 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);
};
最佳答案
调用回调并不意味着当前函数将在此时停止执行。它与调用其他函数相同。在您的情况下,一旦回调函数返回一个值,控制权将仅转移到 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
函数转移。
关于javascript - 回调不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32153299/