链接承诺而不使用'然后'与Q库

时间:2016-11-22 16:43:29

标签: javascript promise q chaining

我试图在没有'然后'的情况下链接Q承诺,所以最终链条看起来像这样:

var foo = new Foo();
foo
.method1()
.method2()
.method3();

如何实现foo的方法,以便在解析前一个的承诺后执行每个方法?

这个问题被标记为this one的完全重复,但我试图使用Q lib而不是jQuery来实现这一点。

1 个答案:

答案 0 :(得分:1)

我不确定你是否会从中获得任何收益。

我想你可以这样做:

function Foo() {
  var self = this,
      lastPromise = Promise.resolve();

  var chainPromise = function(method) {
    return function() {
      var args = Array.prototype.slice.call(arguments))
      lastPromise = lastPromise.then(function(){
        return method.apply(self, args);
      });
      return self;
    }
  }

  this.method1 = chainPromise(function() {
    // do the method1 stuff
    // return promise
  });

  this.method2 = chainPromise(function() {
    // do the method2 stuff
    // return promise
  });

  // etc...
}