首页 > 解决方案 > 如何处理 NodeJS 中的嵌套 Promise

问题描述

我对 Promises 比较陌生,所以希望你能帮助我。我有以下代码:

bcrypt.genSalt(10)
    .then((salt) =>{
        return  bcrypt.hash(newUser.password, salt)
    })
    .then((hash)=>{
        newUser.password = hash;
        return mariaDB.pool.getConnection()
    })
    .then((conn)=>{
        conn.beginTransaction()
            .then() //here I'm doing some database request
            .catch((err)=>{
                console.log(err)
                return conn.rollback() //where is this Promise handled?
            })
    })
    .catch((err)=>{
        res.json({error: err})
    })

我收到一个 newUser 对象,我首先将它传递给 bcrypt 以加密我的密码。然后我需要对我的 MariaDB 数据库进行交易。但是这种“嵌套的 Promises”正确吗?有更好的解决方案吗?承诺“return conn.rollback”在哪里处理?

问候和感谢!

标签: javascriptnode.jscallbackpromisenested

解决方案


像这样简单地做:

bcrypt.genSalt(10)
    .then(salt => bcrypt.hash(newUser.password, salt))
    .then(hash => {
        newUser.password = hash;
        return mariaDB.pool.getConnection()
    })
    .then(conn => {
       return conn.beginTransaction()
          .then(() => {
              // here I'm doing some database request
          })
          .catch( err => {
            conn.rollback();
            throw new Error(err); // this error will be cathed on bottom catch
          });
    })
    .catch(err => res.json({error: err}))

推荐阅读