gpt4 book ai didi

node.js - 使用 throw-catch 打破 promise 链

转载 作者:行者123 更新时间:2023-12-04 10:24:02 25 4
gpt4 key购买 nike

我需要检查用户是否存在于两个数据库中,如果不存在,我必须创建一个新用户。

检查用户是否存在于数据库中 1.
如果存在,则抛出“用户存在”并捕获它而不执行其他 then() 的其余部分。

2. 检查用户是否存在于数据库中。
如果存在,则抛出“用户存在”并捕获它而不执行其他 then() 的其余部分。

否则,如果它不存在,则创建用户。

我试图打破 promise 链。这是场景。
所以我所做的是

const promise = new Promise((resolve, reject) => {
resolve(false);

}).then(value => {
//check if user exists in table 1 and set value to True or False
if (value==True){
throw "User exists";
}
else{
return value;
}
}).then(value=> {
////check if user exists in table 2 and set value to True or False
if (value==True){
throw "User exists";
}
else{
return value;
}
}).catch(err => {
console.log(err);
});

这是它的简要外观。

但即使我抛出一条消息,它也不会停止执行后面的 then() 语句。即使找到用户,它也会继续执行整个代码。

它还显示以下内容并停止整个执行。
                    throw 'user found'
^

注意:在获得用户值后,我必须对其进行处理。所以不应该停止执行。

最佳答案

而不是 throw 使用 return Promise.reject(new Error()) .顺便说一句 - 如果你扔你应该throw new Error('message') .

但这就是错误的处理方式,而不是代码执行的逻辑。

checkIfUserExistsInDB1() //this must be a function returning a promise
.then(user => {
if (!user) return checkIfUserExistsInDB2() //this must be a function returning a promise
else return Promise.resolve(user)
})
.then(user => {
if (!user) return createUser() //this must be a function returning a promise
else return Promise.resolve(user)
})
.then(user=> { do whatever you need more })
.catch(err => { handle error })

关于node.js - 使用 throw-catch 打破 promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60707555/

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