javascript - 如何处理 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”在哪里处理?
问候和感谢!
解决方案
像这样简单地做:
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}))
推荐阅读
- javascript - Html 表单验证标签放置
- javascript - TypeError:无法使用 Ionic 2 读取 HTML5 Canvas 中未定义的属性“nativeElement”
- vba - Microsoft Excel:多次重复特定操作的宏
- xml - 为每个解析xml文件
- gitlab-ci - 推送构建的图像时,Gitlab-runner 有“访问被拒绝”
- swift - 搜索控制器 .dimsBackgroundDuringPresentation 也会使状态栏变暗?
- haskell - Haskell - 输入解析错误
- ios - URL 未在 webview 上加载
- vue.js - 使用“createElement”函数时如何使道具绑定反应
- java - ElasticSearch Java RestClient - 等待 f 或 [30000] 毫秒后的侦听器超时