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); 

以便控件将立即从findfunction中转移。

在响应(res)放置return语句之后,否则会尝试执行剩余的语句或将其放入其他部分。