У меня есть простой объект Javascript (Node), который имеет функцию, которая устанавливает свойство объекта и возвращает обещание.Chained Promises (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
Я добавил его в качестве ответа :-) без проблем. –