两种承诺链实现方式的区别

时间:2016-09-16 08:03:43

标签: javascript promise

我注意到两种承诺链:有什么不同吗?

promise1()   
  .then(promise2)
  .then(promise3)
  .then(promise4);

promise1().then(function() {
     return promise2();
   }).then(function() {
     return promise3();
   }).then(function() {
     return promise4(){
   }).then(function() {
   });

2 个答案:

答案 0 :(得分:3)

是的,存在差异 - then使用结果值调用其参数,但是您的第二个片段忽略任何参数并调用所有带零参数的函数。此外,由于额外的空回调,保证与undefined一起使用(如果它不拒绝),与使用promise4(…)的返回值解析的第一个代码段相反。

当然,第一个也更容易阅读。

答案 1 :(得分:2)

实际上,两个片段在序列方面没有区别,因为您的代码将在两个片段中以相同的顺序运行。

但是您的片段显示有几个不同之处。其中一个是传递参数,第二个是返回当时的结果。

考虑到第一个区别,第一个片段虽然你没有使用它,但它会获取参数,而第二个片段不是这种情况,因为你没有传递任何参数也没有使用它。

最后在考虑第二个区别的时候,你没有在第一个片段中返回任何东西,而在第二个片段中,你在每个句子之间调用函数而不是最后一个,这导致在最后修复undefined。