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

标签 javascript async-await eslint ecmascript-2017

假设我们有普通对象

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 给了我错误:

enter image description here

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

"parserOptions": {
  "ecmaVersion": 2017
}

关于javascript - 为什么 ESLint 在将异步函数定义为现有对象的方法时会抛出解析错误以及如何防止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250682/

相关文章:

javascript - @typescript-eslint/no-unused-vars 类型声明中的误报

node.js - Eslint 说 Typescript 应用程序中的所有枚举都是 "already declared in the upper scope"

javascript - 如何使用 JavaScript/JQuery 创建简单的 map

javascript - Google 网站搜索 - 10 个结果限制

javascript - HTML5 音频 - 进度条

javascript - 如何让 JavaScript 类方法等待构造函数中的数据加载后才返回数据?

Javascript Promise 解决混淆

c# - HttpClient.SendAsync 不等待/锁定执行

Flutter - 异步文件读取异常处理

带有声明的元组的 typescript lint "no-unused-vars"