2
我有一个简单的Javascript(Node)对象,它具有一个函数,用于设置对象的属性并返回承诺。带对象/原型的链式承诺(Q延迟)使用对象/原型
请注意,对于此示例,我删除了需要延期的实际异步调用,因为它不影响结果。
var q = require("Q");
var Foo = function(){
this.bar = false;
return this;
};
Foo.prototype.set = function(){
var d = q.defer();
this.bar = true;
d.resolve();
return d.promise;
};
Foo.prototype.check = function(){
var d = q.defer();
console.log(this.bar);
d.resolve();
return d.promise;
};
当以上所述的承诺失败方式如下所示,this.bar是真实的(如预期)。
var foo = new Foo();
foo.set().then(function(){
foo.check();
});
然而,当它被称为一个链中,它是不确定的:
foo.set().then(foo.check);
我很好奇,想知道是什么导致了这一点。我最好的猜测是关于我的对象方法链接在一起的方式的封闭问题。
在大多数情况下,我会通过价值来解决/拒绝并从那里去。在这种情况下,我想通过一系列顺序功能运行一些数据(有些需要延期)。我不想将输出传递给链中的每个函数,而是希望存储和更新对象本身中的数据。
任何清晰度将不胜感激!
尝试'foo.set(解决问题),然后(foo.check .bind(foo));' –
啊,是的,这是有效的。非常感谢! – JKE
我将它添加为答案:-)没问题,欢迎您 –