如何使用带有promise绑定的ES6箭头函数(bluebird)

时间:2015-08-18 20:45:46

标签: ecmascript-6 bluebird

我在节点中使用babel的require hook来利用ES6,但我在bluebird promise chain中遇到了箭头函数的一些挑战。

我在我的promise链的顶部使用.bind({})和一个空对象创建共享状态,我可以存储以前的值,直到我需要它们进一步向下链。 Bluebird将此用法解释为" useful side purpose"。

当我切换到箭头功能时,我不能再使用共享状态了,因为箭头功能使用词汇this,它在babel中是undefined(babel自动以严格模式运行)。

工作示例:https://jsbin.com/veboco/edit?html,js,console

ES6示例(不工作):https://jsbin.com/menivu/edit?html,js,console

在这种情况下有没有办法利用箭头功能?在我的代码中,我从一个对象方法中调用这些方法 - 不应该将this定义为调用该方法的对象吗?

1 个答案:

答案 0 :(得分:4)

如果您不想要词汇绑定this,则无需使用箭头功能。如果您想要动态绑定this,则不要使用箭头功能。

当然,您可以废弃.bind({})作为一个整体并使用绑定到对象的箭头函数,方法是将所有内容放入对象方法(或示例中的IIFE)中:

(function() {
  this; // the value that everything is bound to
  double(2).then(result => {
    this.double = result; // store result here
    return triple(2);
  }).then(result => {
    console.log('double:', this.double);
    console.log('triple:', result);
    console.log('sum:', this.double + result);
  }).catch(err => {
    console.log(err.message);
  });
}.call({}));

但是,有much better ways to access previous results in a promise chain而不是contextual state,特别是如果你是using ES6