Я использую Bluebird для обещаний и пытается разрешить цепочку, но использование .bind() похоже не работает. Я получаю:Bluebird Promise Bind Chain
TypeError: sample.testFirst(...).testSecond is not a function
Первый метод называется правильно и начинает обещание цепи, но я гавань была в состоянии получить экземпляр связывания работу на всех.
Это мой тестовый код:
var Promise = require('bluebird');
SampleObject = function()
{
this._ready = this.ready();
};
SampleObject.prototype.ready = function()
{
return new Promise(function(resolve)
{
resolve();
}).bind(this);
}
SampleObject.prototype.testFirst = function()
{
return this._ready.then(function()
{
console.log('test_first');
});
}
SampleObject.prototype.testSecond = function()
{
return this._ready.then(function()
{
console.log('test_second');
});
}
var sample = new SampleObject();
sample.testFirst().testSecond().then(function()
{
console.log('done');
});
Я использую последнюю Bluebird через:
npm install --save bluebird
ли я приближается это неправильно? Буду признателен за любую помощь. Благодарю.
Мое предположение было, что есть только один посыл, построенный через готовые(), то каждый тест() функция - это просто другая цепочка() в обещании, которое продолжает наследовать SampleObject для более цепных вызовов. Это возможно? – Pat841
Нет, каждый раз, когда вы вызываете 'ready()', создается новое обещание, вы можете связать каждое из этих обещаний с помощью '.then()'. И да, каждая тестовая функция - это еще одна цепочка, но вы должны отнести ее к следующему, как я сделал в своем ответе. – superUser
Но ready() вызывается только один раз, внутри конструктора объектов, который возвращает обещание. Каждая тестовая функция использует then() через уже созданное Promise. – Pat841