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.