如何在承诺链中使用Bluebird .spread

时间:2017-08-02 18:10:13

标签: node.js promise bluebird es6-promise

我在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定义。

0 个答案:

没有答案