Spec-Zone.ru › ESLint

no-async-promise-executor

Запрещает использовать асинхронную функцию в качестве исполнителя Promise

✅ Рекомендуется

Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило

Конструктор new Promise принимает в качестве аргумента функцию исполнителя, которой передаются параметры resolve и reject для управления состоянием созданного Promise. Например:

const result = new Promise(function executor(resolve, reject) {
  readFile('foo.txt', function(err, result) {
    if (err) {
      reject(err);
    } else {
      resolve(result);
    }
  });
});

Функция-исполнитель также может быть async function. Однако обычно это ошибка по нескольким причинам:

  • Если асинхронная функция-исполнитель выбрасывает ошибку, она будет потеряна и не приведёт к отклонению только что созданного Promise. Это может затруднить отладку и обработку некоторых ошибок.
  • Если функция-исполнитель Promise использует await, это обычно означает, что конструктор new Promise на самом деле не нужен или область действия конструктора new Promise может быть сокращена.

Описание правила

Это правило запрещает использовать асинхронные функции в качестве исполнителей Promise.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-async-promise-executor: "error"*/

const foo = new Promise(async (resolve, reject) => {
  readFile('foo.txt', function(err, result) {
    if (err) {
      reject(err);
    } else {
      resolve(result);
    }
  });
});

const result = new Promise(async (resolve, reject) => {
  resolve(await foo);
});

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint no-async-promise-executor: "error"*/

const foo = new Promise((resolve, reject) => {
  readFile('foo.txt', function(err, result) {
    if (err) {
      reject(err);
    } else {
      resolve(result);
    }
  });
});

const result = Promise.resolve(foo);

Параметры

У этого правила нет параметров.

Когда не следует использовать это правило

Если ваша кодовая база не поддерживает синтаксис async function, включать это правило не нужно.

Версия

Это правило появилось в ESLint v5.3.0.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-async-promise-executor

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API