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

标签 node.js promise

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

检查数据库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'
                    ^

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

最佳答案

不要使用 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/

相关文章:

javascript - Node.js 逐行异步操作

javascript - 如何从异步类函数 JavaScript 返回 Promise

javascript - 在数组和对象之间使用逗号运算符的 Promise.all 如何工作?

javascript - Mongodb 更新路径会产生冲突

gwt - 是否可以在 NodeJS 中托管 GWT 编译的 Web 应用程序?

javascript - 在 Node 中使用selenium-webdriver等待Ajax完成

javascript - 使用 Promise 等待轮询条件满足

javascript - 如何通过 Body-parser 获取 post 值 - Express Node.js

javascript - 基于 promise 的递归函数中的问题

javascript - 当其中一个获取延迟响应时,如何在 Redux 中进行多次获取操作?