Używam Bluebird do obietnic i staram się zezwolić na wywoływanie łańcucha, jednak użycie .bind() nie działa. Dostaję:Bluebird Promise Bind Chain
TypeError: sample.testFirst(...).testSecond is not a function
Pierwsza metoda nazywa się prawidłowo i uruchamia łańcuch obietnica ale miałaś w stanie uzyskać pracę wiążącą instancji w ogóle.
To jest mój kodu testu:
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');
});
używam najnowszego Bluebird poprzez:
npm install --save bluebird
jestem zbliża to źle? Byłbym wdzięczny za każdą pomoc. Dzięki.
Moim założeniem było to, że istnieje tylko jedna obietnica zbudowany przez ready(), a następnie każdy test() funkcja jest po prostu kolejnym łańcuchem then() w obietnicy, która nadal dziedziczy obiekt SampleObject w przypadku większej liczby połączeń łańcuchowych. Czy to jest możliwe? – Pat841
Nie, za każdym razem, gdy wywołujesz 'ready()' tworzy nową obietnicę, możesz połączyć każdą z tych obietnic za pomocą '.then()'. I tak, każda funkcja testowa jest kolejnym łańcuchem, ale musisz ją odnieść w odniesieniu do następnej, tak jak zrobiłem to w mojej odpowiedzi. – superUser
Ale ready() jest wywoływane tylko raz, wewnątrz konstruktora obiektów, który zwraca obietnicę. Każda funkcja testowa używa wtedy() za pośrednictwem już utworzonej obietnicy. – Pat841