gpt4 book ai didi

javascript - 链接 javascript promises 时如何处理 then() 函数中的条件?

转载 作者:行者123 更新时间:2023-11-30 10:05:45 25 4
gpt4 key购买 nike

我正在处理 promises 并且需要弄清楚如何正确地链接它们,我理解如果 promises 在成功时解决并在错误时拒绝它是如何工作的,但是如果在其中一个 promises 之后可能出现错误状态怎么办解决了吗?

这是我的场景

function getUser(userId){...} 
// resolves if user exist and (activated or not) returning user
// rejects to error1: user does not exist

function doTask(user){...}
// resolves on successful completion of the task
// rejects error3: could not do Task

如果我想用用户 id 做另一个 promise do 任务怎么办,但前提是用户被激活

// function doTaskWithUserId(userId)
// reject to error1; user does not exist
// reject to error2; if user is not activated
// reject to error3; could not do task

这是我能做的,但如果我觉得我在搞砸某事;但这似乎是一个 promise 反模式

function doTaskWithUserId(userId){
var deffered = q.defer();
getUser(userId)
.then(function(user){
if(user.activated === true){
return doTask(user);
}else{
deffered.reject(error2); // user is not activated
}
}, function(){
deffered.reject(error1); // user does not exist
})
.then(function(){
deffered.resolve(); // task complete
}, function(){
deffered.reject(error3) // could not do task
})
return deffered.promise;
}

看来,如果我这样做,外部 promise 就会挂起,我已经阅读了 .fail() 和 .catch 方法,但似乎无法理解它们。任何帮助!谢谢

最佳答案

But this seems to be a promise anti-pattern

确实是:deferred antipattern !你不需要构造一个新的deferred,你可以just chain您的操作、映射和错误使用 then。你会简单地 reject the returned promise通过 throw :

function doTaskWithUserId(userId) {
return getUser(userId).then(function(user) {
// ^^^^^^
if (user.activated) {
return doTask(user);
} else {
throw error2; // user is not activated
}
}); // .then() returns a promise, which we return from the function
}

关于javascript - 链接 javascript promises 时如何处理 then() 函数中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29268790/

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