回调未返回

时间:2015-08-22 06:53:19

标签: javascript node.js

我出于某种原因看到最后一次回调命中,即使它确实进入了第一个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);
};

2 个答案:

答案 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部分。