【问题标题】:Clean code and Nested promises [duplicate]干净的代码和嵌套的承诺 [重复]
【发布时间】:2016-08-23 08:27:48
【问题描述】:

使用嵌套 promise 编写干净代码的正确策略是什么?使用 Promise 背后的想法之一是摆脱嵌套回调,也就是 callback hell。即使在使用 Promise 时,有时嵌套似乎也是不可避免的:

User.find({hande: 'maxpane'})
  .then((user) => {
    Video.find({handle: user.handle})
     .then((videos) => {
       Comment.find({videoId: videos[0].id})
        .then((commentThead) => {
            //do some processing with commentThread, vidoes and user
        })
     })
  }) 

有没有办法摆脱嵌套并使代码更“线性”。事实上,这段代码看起来与使用回调的代码没有太大区别。

【问题讨论】:

  • 似乎this answer 对你来说可能是一本不错的读物,如果不是重复的话。

标签: javascript node.js asynchronous ecmascript-6 es6-promise


【解决方案1】:

使用 Promise 的最大优势是链式。这就是你应该正确使用它的方式:

User.find({handle: 'maxpane'})
.then((user) => {
  return Video.find({handle: user.handle})
})
.then((videos) => {
  return Comment.find({videoId: videos[0].id})
})
.then((commentThead) => {
  //do some processing with commentThread, vidoes and user
})

每次您在 .then 中返回一个 Promise 时,它​​都会用作下一个 .then 回调的 Promise。

【讨论】:

  • commentThreadvideosuser变量在最终函数中可用,在我看来只有commentThread在函数范围内。
猜你喜欢
  • 2016-05-27
  • 2018-01-31
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多