我在node.js应用程序(节点6.10)中使用bluebird库,我需要链接几个promise。
我注意到bluebird有一个.spread函数,可以让你自定义ёPromise.all()Í承诺中的参数,如果完成就可以正常工作。
var promise1 = Promise.promisify(image.getBuffer, {context: image});
var promise2 = Promise.promisify(imageThumb.getBuffer, {context: imageThumb});
Promise
.all([promise1(Jimp.AUTO), promise2(Jimp.AUTO)])
.spread(function(buffer, bufferThumb){
console.log("SPREAD IS A FUNCTION");
});
*此作品!!!
但是这个:
...
var promise1 = Promise.promisify(image.getBuffer, {context: image});
var promise2 = Promise.promisify(imageThumb.getBuffer, {context: imageThumb});
return Promise
.all([getBufferAsync(Jimp.AUTO), getBufferAsyncThumb(Jimp.AUTO)]);
})
.spread(function(buffer, bufferThumb){
// this never gets called:
console.log("SPREAD IS NOT A FUNCTION");});
...
*无法正常工作,我的事件在表单中出现错误:
TypeError:blahbla.read(...)。then(...)。spread不是函数
我使用以下方法管理了一个解决方法:
...
}).then(function(data){
// use data[0], data[1]
...
但我真正想做的是在promise链中使用.spread。由于我已经在使用bluebird,我认为Promise.all()返回的Promise是一个Bluebird的承诺,我可以直接使用.spread函数。虽然它看起来像是对链条的承诺给蓝鸟糖带来了条纹,并留下了简单的ES6承诺。
欢迎任何有关如何使其发挥作用的想法!
现在我将使用.then(数据),数据[0]等方法。
**问题不在于承诺不会解决,问题是.spread失败,因为它不是承诺链中的一个功能。通过从最初使用Bluebird承诺的函数开始,假设链的其余部分将坚持Bluebird Promise定义。