Ich benutze Bluebird für Versprechungen und versuchen, Chain-Calling jedoch mit .bind() scheint nicht zu funktionieren. Ich erhalte:Bluebird Promise Bind Chain
TypeError: sample.testFirst(...).testSecond is not a function
Die erste Methode korrekt aufgerufen wird, und startet die Versprechen Kette, aber ich habe überhaupt die Instanz verbindlich Arbeit bekommen kann.
Dies ist mein Testcode:
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');
});
Ich bin mit der neuesten drossel über:
npm install --save bluebird
Bin ich das falsch nähern? Ich würde jede Hilfe schätzen. Vielen Dank.
Meine Vermutung war, dass es nur ein einziges Versprechen über fertig gebaut ist() dann jeder Test() Funktion ist nur eine weitere then() - Kette in der Zusage, die das SampleObject für mehr verkettete Aufrufe weiter erbt. Ist das möglich? – Pat841
Nein, jedes Mal, wenn Sie 'ready()' aufrufen, wird ein neues Versprechen erstellt, Sie können jedes dieser Versprechen mit '.then()' verketten. Und ja, jede Testfunktion ist eine andere Kette, aber Sie müssen sie in Bezug auf den nächsten beziehen, wie ich es in meiner Antwort getan habe. – superUser
Aber ready() wird nur einmal innerhalb des Objektkonstruktors aufgerufen, der das Versprechen zurückgibt. Jede Testfunktion verwendet dann() über das bereits erstellte Promise. – Pat841