回调未返回
Callback not returning
由于某种原因,我看到了最后一个回调命中,即使它确实进入了第一个if语句。当我执行response(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
功能转移。
在response(res)后放置return语句,否则将尝试执行剩余语句或将其放入else部分
相关文章:
- 函数表达式,返回回调函数
- 如何“;等待”;以便返回回调
- jQuery,动画和动画返回.回调函数错误?:S
- 节点.js AMQP 不返回回调
- 返回回调函数 Node.js 的数据
- 承诺不返回回调数组
- 使用 jsonp 和 php 返回回调
- 订阅子作用域上的事件,并在broadcastemit中返回回调
- 为什么angular返回回调函数内部的函数
- Node.js:为什么要在错误处理期间返回回调的结果
- 如何构造代码以返回回调
- 具有HTTP请求的Meteor方法不返回回调
- 我如何返回回调MySQL查询和推到一个数组在Node.js
- 如何从使用node-oracledb的查询返回回调
- 直接调用回调或返回回调
- 设置变量返回回调监听器
- 泛型池函数返回回调的结果
- 回调中的AWS返回回调
- 我应该返回回调还是直接运行它
- 节点HTTPS请求没有在Lambda中返回回调函数