将ES7异步回调绑定到其父作用域上下文的最简洁方法是什么

时间:2015-07-26 14:22:57

标签: javascript ecmascript-7

我想使用ES7异步回调来编写这样的代码。

class Foo {

  bar(app) {

    // const that = this
    app.on('something', async function() {
      await this.baz() // `this` is `app`. I want it to be the instance of Foo (`that`)
    }

  }

  async baz() {
    console.log('baz')
  }

}

在ES6中我们可以使用anon funcs,但我不能在内部使用await。我可以使用承诺,但我想要简单等待。

app.on('something', () => {
  this.baz()
})

我们可以使用单独的方法进行回调。但这很冗长。

class Foo {

  bar(app) {
    app.on('something', this.onSomething)
  }

  async onSomething() {
    await this.baz() // `this` is `app`. I want it to be the instance of Foo (`that`)
  }

  async baz() {
    console.log('baz')
  }

}

那么考虑到我的约束,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

错过了显而易见的事情 - 我以为我之前已经读过一些事情,因为无法使用带有异步的匿名函数。

app.on('live-app:start', async () => { this })