干净的代码和嵌套的承诺 [重复]

Posted

技术标签:

【中文标题】干净的代码和嵌套的承诺 [重复]【英文标题】: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 对你来说可能是一本不错的读物,如果不是重复的话。 【参考方案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在函数范围内。

以上是关于干净的代码和嵌套的承诺 [重复]的主要内容,如果未能解决你的问题,请参考以下文章