gpt4 book ai didi

javascript - 从嵌套函数返回

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:19 25 4
gpt4 key购买 nike

我是 Node/javascript的新手,所以我的问题可能很微不足道,但它给我带来的麻烦也不少。

我有以下代码。它成功检查数据库中的 UnitOwner 值。问题在于 if 语句 else if (Owner){ 后面的代码按预期执行,但是,在程序永远不会到达 returnreply(output);行,我希望它应该如此。

我认为这是我从 Owner.findOne(... 代码返回的方式。

有人能看出我做错了什么吗?

exports.sale = {
tags: ['api'],
validate : {
//blah blah blah
},
handler : function(request, reply) {
var output = {
success: true,
operations: [],
epoch: Date.now()
};

Unit.findById(request.payload.deviceNumber, function(err, device) {
if (err) {
//blah blah blah
}
if (device) {
Owner.findOne({OwnerId: device.Owner}, function(err, Owner) {
if (err) {
//blah blah blah
}
else if (Owner){
//make changes to output.operations

}
});
} else {
output.success = false;

}
return reply(output);

});

}
};

最佳答案

代码中存在一些问题。

首先,假设 if (err) 子句没有相同的 return reply(output) 语句,这意味着您的代码将始终执行 return(output) 无论如何,因为 Unit.findById 是异步的。也就是说,代码不会等待 Unit.findById 的响应完成,一旦调用它,代码就会继续前进并最终返回 return 声明。

其次,Owner.findOne 应该在回调函数的代码块内有自己的 return 语句,因为代码只会在其中移动。

因此,对于 Owner.findOne 和 Unit.findById 成功执行的顺利路径情况,您仍然会收到 output.success = false 的响应。

因此,忽略代码可读性来解决问题 - 您的代码应该如下所示。

Unit.findById(request.payload.deviceNumber, function(err, device) {
if (err) {
//blah blah blah
output.success = false;
return reply(output);
}
if (device) {
Owner.findOne({OwnerId: device.Owner}, function(err, Owner) {
if (err) {
//blah blah blah
output.success = false;
return reply(output);
}
else if (Owner){
//make changes to output.operations
}
output.success = true;
return reply(output);
});
} else {
output.success = false;
return reply(output);
}

});

关于javascript - 从嵌套函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com