首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用throw catch打破承诺链

使用throw catch打破承诺链
EN

Stack Overflow用户
提问于 2020-03-16 22:12:25
回答 1查看 53关注 0票数 2

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

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

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

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

我在试着打破承诺链。这是一个场景。所以我所做的是

代码语言:javascript
复制
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()语句。即使找到了用户,它也会继续执行整个代码。

它还显示了下面的代码,并停止了整个执行。

代码语言:javascript
复制
                    throw 'user found'
                    ^

注意:在获得用户值之后,我必须对它们做一些处理。所以不应该停止执行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 22:26:21

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

但这是应该如何处理错误,而不是代码执行的逻辑。

代码语言:javascript
复制
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 }) 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60707555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档