在 Q 库中不使用 'then' 链接承诺

Chaining promises without using 'then' with Q library

我正在尝试在没有 'then' 的情况下链接 Q promises,所以最终链将如下所示:

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

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

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

我不确定你是否会从中得到什么。

我想你可以这样做:

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