gpt4 book ai didi

javascript - promise 失败状态

转载 作者:行者123 更新时间:2023-12-03 08:22:27 24 4
gpt4 key购买 nike

Promise 要么是解决,要么是拒绝,但我想要一个失败选项:

users.parse(body)
.then(function (data){
if(data.status == 'fail') {
res.fail(data.data);
} else {
return users.saveUser(data.data);
}
}).then(function (user) {
res.success(merchant);
}).catch(function (err) {
res.error(err);
});

所以我基本上做的是使用名为“fail”的状态对象进行解析,以指示它是一个失败过程,因此我发送失败消息而不是错误消息。

我这样做对吗,无论如何上面的代码会给我错误:

Unhandled rejection Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)

最佳答案

如果用户失败,您的第一个回调将返回 undefined,第二个 then 回调仍将执行,其值为 undefined对于用户。在 res.fail 之后调用 res.success 将引发异常,进而导致执行 catch 回调,因此它会尝试调用res.error 再次抛出 header 已发送的错误。

您应该能够使用以下方法解决此问题

users.parse(body).then(function(data) {
if (data.status == 'fail') {
res.fail(data.data);
} else {
return users.saveUser(data.data).then(function(user) {
res.success(merchant);
});
}
}).catch(function(err) {
res.error(err);
});

但是,更干净的解决方案是使用

users.parse(body).then(function(data) {
if (data.status == 'fail') return data;
else return users.saveUser(data.data);
}).then(function(user) {
if (data.status == 'fail')
res.fail(data.data);
else
res.success(merchant);
}, function(err) {
res.error(err);
});

使用Maybe仿函数进行抽象可以得到一些好处。

关于javascript - promise 失败状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33695075/

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