javascript - 回调不返回

标签 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);
};

最佳答案

调用回调并不意味着当前函数将在此时停止执行。它与调用其他函数相同。在您的情况下,一旦回调函数返回一个值,控制权将仅转移到 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/

相关文章:

javascript - 嵌套函数的回调

javascript - IE8 中未知的 JS 错误

javascript - 无法找到 div 元素的子元素

node.js - 对 express.js 登录 session 进行基准测试

node.js - Node js 中的一次性密码

node.js - 错误 - 创建服务时后退重新启动失败的容器

javascript - promise 和 promise 链是如何工作的? [代码问题]

java - Socket.io 无需加入即可收听房间

javascript - 如何(wrapInner 或 wrapAll)排除第一个 div 类

javascript - 如何重新加载 angularjs 范围数据而不重新渲染绑定(bind) View