callback不回来
我是由于某种原因,看到最后一个callback命中,即使它得到里面的第一个if语句。 当我做出回应(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); };
调用callback并不意味着当前的函数将停止执行。 这和调用其他函数是一样的。 在你的情况下,一旦callback函数返回一个值,控件就被转移到find
函数,并继续执行其余的语句。
为了解决这个问题,你需要在callback返回后立即从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
function中转移。
在响应(res)放置return语句之后,否则会尝试执行剩余的语句或将其放入其他部分。