Почему ESLint выдает ошибку синтаксического анализа при определении асинхронной функции как метода для существующего объекта и как ее предотвратить?

Предположим, у нас есть простой объект

const foo = {}

и, используя синтаксис конструктора Promise, мы добавим к нему асинхронный метод следующим образом:

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

но мы не можем этого сделать (согласно ESlint):

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

какой удобный подход для добавления новых асинхронных функций к объектам в качестве свойств метода после того, как объект уже объявлен?


person Kunok    schedule 14.01.2018    source источник
comment
Вы не можете получить доступ к исходному создаваемому объекту?   -  person dewwwald    schedule 14.01.2018
comment
@dewwwald Нет, это просто ошибка синтаксического анализа ESLint, дополнительную информацию см. в ответе ниже.   -  person Kunok    schedule 14.01.2018
comment
Я знаю это. Вот почему я спрашиваю. Я был занят написанием ответа. Так что, если у вас есть доступ к созданию объекта, это будет очевидно. См. потенциальное решение ниже.   -  person dewwwald    schedule 14.01.2018


Ответы (1)


Похоже, что синтаксис из вопроса действительно действителен:

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
}
person Kunok    schedule 14.01.2018
comment
сработало и на моем конце! - person AL-zami; 14.01.2018