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);

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

Если ваш код не поддерживает синтаксис асинхронных функций, нет необходимости включать это правило.

Версия

Это правило было добавлено в 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