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
我將它添加爲答案:-)沒問題,歡迎您 –