如何在 promise 绑定中使用 ES6 箭头函数 (bluebird)

How to use ES6 arrow functions with promise binding (bluebird)

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

我在我的承诺链的顶部使用 .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 定义为调用方法的对象吗?

如果您不想词法绑定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({}));

不过,还有 than , especially if you are