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.
Примеры неправильного кода для этого правила:
/*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 = new Promise( (resolve, reject) => {
resolve(await foo);
});
Примеры правильного кода для этого правила:
/*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