javascript node.js promise bluebird chain

javascript - Bluebird Promise Bind Chain



node.js (1)

Está arrojando ese error porque no hay testSecond método. testSecond en la testFirst . testFirst , si desea hacer algo después de que se resuelvan ambas promesas, hágalo como se muestra a continuación:

var sample = new SampleObject(); Promise.join(sample.testFirst(), sample.testSecond()).spread(function (testFirst, testSecond){ // Here testFirst is returned by resolving the promise created by `sample.testFirst` and // testSecond is returned by resolving the promise created by `sample.testSecond` });

Si desea comprobar si ambos se resuelven correctamente, en lugar de hacer un console.log, devuelva la cadena en las funciones testFirst y testSecond e inícielas en la devolución de llamada como se muestra a continuación:

SampleObject.prototype.testFirst = function() { return this._ready.then(function() { return ''test_first''; }); } SampleObject.prototype.testSecond = function() { return this._ready.then(function() { return ''test_second''; }); }

Ahora, al hacer un console.log en la devolución de llamada spread como se muestra a continuación, se registrarán las cadenas devueltas por las promesas anteriores:

Promise.join(sample.testFirst(), sample.testSecond()).spread(function(first, second){ console.log(first); // test_first console.log(second); // test_second });

Estoy usando Bluebird para las promesas y tratando de permitir la cadena de llamadas, sin embargo, el uso de .bind () no parece funcionar. Estoy obteniendo:

TypeError: sample.testFirst (...). TestSecond no es una función

El primer método se llama correctamente y comienza la cadena de promesas, pero no he podido lograr que el enlace de la instancia funcione.

Este es mi código de prueba:

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''); });

Estoy usando el último bluebird a través de:

npm install --save bluebird

¿Me estoy acercando a esto mal? Apreciaría cualquier ayuda. Gracias.