我试图链Q承诺不“那么”,所以最终的链条是这样的:链的承诺不使用“然后”带Q库
var foo = new Foo();
foo
.method1()
.method2()
.method3();
如何实现Foo的方法,使每一个一旦前一个承诺得到解决,就会被执行?
这个问题被标记为this one的确切副本,但我试图用Q lib而不是jQuery来实现。
我试图链Q承诺不“那么”,所以最终的链条是这样的:链的承诺不使用“然后”带Q库
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...
}
回报'this'关键字在JavaScript – Mahi
除非美孚为Q的扩展,'this'并未真正发挥作用。 'method1'返回的东西本身必须包含一个'method2',只有在'method1'解析后才能调用它自己。 – Brian