为什么 ESLint 在将异步函数定义为现有对象的方法时抛出解析错误以及如何防止它?

Why does ESLint throw parsing error while defining async function as method to existing object and how to prevent it?

假设我们有普通对象

const foo = {}

并且通过使用 Promise 构造函数语法,我们将以这种方式向其添加异步方法:

foo.myAsyncMethod = function () {
  return new Promise((resolve, reject) => {
    ...
  })
}

但我们不能这样做(根据 ESlint):

foo.myAsyncMethod = async function() {
  ...
}

在声明对象后,将新的异步函数作为方法属性添加到对象的便捷方法是什么?

看来问题的语法实际上是合法的:

const obj = {}

obj.foo = function () {
  return new Promise((resolve, reject) => {
    resolve(1)
  })
}

obj.bar = async function () {
  return await Promise.resolve(2)
}

obj.foo().then(context => console.log(context))

obj.bar().then(context => console.log(context))

产生:

1
2

因为 ESLint 给我错误,我被它搞糊涂了:

此外,要修复 ESLint 的解析错误,请将其添加到您的 babelrc 文件中:

"parserOptions": {
  "ecmaVersion": 2017
}