Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 干净的代码和嵌套的承诺_Javascript_Node.js_Asynchronous_Ecmascript 6_Es6 Promise - Fatal编程技术网

Javascript 干净的代码和嵌套的承诺

Javascript 干净的代码和嵌套的承诺,javascript,node.js,asynchronous,ecmascript-6,es6-promise,Javascript,Node.js,Asynchronous,Ecmascript 6,Es6 Promise,使用嵌套承诺编写干净代码的正确策略是什么?使用承诺背后的一个想法是摆脱嵌套回调,即回调地狱。即使使用承诺,嵌套有时似乎也是不可避免的: User.find({hande: 'maxpane'}) .then((user) => { Video.find({handle: user.handle}) .then((videos) => { Comment.find({videoId: videos[0].id}) .then((com

使用嵌套承诺编写干净代码的正确策略是什么?使用承诺背后的一个想法是摆脱嵌套回调,即
回调地狱
。即使使用承诺,嵌套有时似乎也是不可避免的:

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
        })
     })
  }) 

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

使用承诺的最大优势是链接。这就是你应该如何正确使用它:

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
})

每次您在
中返回一个承诺时,它将被用作下一个
的承诺。然后
回调。

注释线程
视频
用户
变量,在最终函数中可用,在我看来,只有commentThread在函数的范围内。如果不是重复的话,对你来说可能是一本很好的读物。