gpt4 book ai didi

javascript - 如何适本地调用相互依赖的链式 promise 调用?

转载 作者:搜寻专家 更新时间:2023-10-31 23:11:42 24 4
gpt4 key购买 nike

我有以下代码:

const request = require('request-promise');

request(validateEmailOptions).then(function(result) {
if (result.valid) {
request(createUserOptions).then(function (response) {
if (response.updatePassword) {
request(modifyUserOptions).then(function (response) {
return res.redirect('/signin');
}).catch(function(error) {
return res.redirect('/error');
});
}
}).catch(function(error) {
return res.redirect('/error');
});
} else {
return res.redirect('/error');
}
})
.catch(function (reason) {
return res.redirect('/error');
});

基本上,这是一个请求调用链,每个请求调用都基于前一个调用的结果。问题是我在每个条件下都有更多行,因此我的代码臃肿且难以阅读和遵循。我想知道是否有更好的方法来使用请求 promise 或简单地请求和 Bluebird 来编写调用链。

最佳答案

您可以解除 promise 的嵌套。认为这样:

f(a).then(function(a) {
return g(b).then(function(b) {
return h(c)
})
})

等同于:

f(a).then(function(a) {
return g(b)
}).then(function(b) {
return h(c)
})

我会建议尽早失败,这意味着首先处理错误情况,并有有意义的错误消息以便能够在需要时记录它们。最后,您可以传播错误并在单个捕获中处理它。将它放在代码的上下文中:

request(validateEmailOptions).then(function(result) {
if (!result.valid) {
throw new Error('Result is not valid');
}
return request(createUserOptions);
}).then(function(response) {
if (!response.updatePassword) {
throw new Error('Password is not updated');
}
return request(modifyUserOptions);
}).then(function(response) {
return res.redirect('/signin');
}).catch(function(error) {
// you may want to log the error here
return res.redirect('/error');
});

关于javascript - 如何适本地调用相互依赖的链式 promise 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38062163/

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