承诺链/通用代码约定/风格

时间:2016-06-07 18:43:58

标签: javascript promise bluebird

我可以使用一些承诺惯例最佳实践作为参考。

我的意思是,当你写作时,你可以像这样做

step1().then(step2()).then(retur ...step3())    
   .catch(function(err) {
       console.log(err)
  ;});

但我认为可读方式更像

step1()
   .then(function() {
      return step2();
   }).then(function() {
      return step3()
   }).catch(function(err) {
      log(err);
   });

有一些官方建议如何在可读性等方面更好地编写它......

1 个答案:

答案 0 :(得分:1)

如果您已经准备好连接方法,那么创建中间闭包没有任何好处。 你的两个例子也做了完全不同的事情。你的第一个例子应该是这样的。

/codes[code[contains(., 'AP')] and code[contains(., 'BS')]]

我认为这没有任何问题。这也将使您的堆栈跟踪更具可读性。

这是因为,在这个例子中,你有一堆中间匿名函数。 因此,堆栈跟踪将包含对这些匿名函数的引用,而它们没有任何价值。

step1()
   .then(step2)
   .then(step3)    
   .catch(function(err) {
       console.log(err)
  ;});

为了防止匿名混乱,您需要为所有匿名方法命名,如此。

step1()
   .then(function(val) {
      return step2(val);
   }).then(function(val) {
      return step3(val)
   }).catch(function(err) {
      log(err);
   });

我在前面加上一个下划线,因为它们的名称与我们正在调用的实际方法不同。
这是一堆重复,它没有多大意义,因为_step2和step2函数完全相同。

另请注意,在您的首选示例中,您没有正确传递参数,我已经在上面添加了该逻辑,正如您所看到的,进一步增加了噪声。