如何将 ES6 箭头函数与 promise 绑定(bluebird)一起使用

Kev*_* Wu 3 ecmascript-6 bluebird

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

.bind({})在我的承诺链的顶部使用一个空对象来创建共享状态,我可以在其中存储以前的值,直到我在链的下游需要它们为止。Bluebird 将这种用法解释为“有用的副目的”。

当我切换到箭头的功能,我不能再因为箭头函数使用词汇使用共享状态this,其是undefined在巴别(巴别在严格模式下自动运行)。

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

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

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

Ber*_*rgi 5

如果您不想要词法绑定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({}));
Run Code Online (Sandbox Code Playgroud)

然而,有比上下文状态更好的方法来访问承诺链中先前的结果,尤其是当您使用 ES6 时