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);
Параметры
У этого правила нет параметров.
Когда не следует использовать это правило
Если ваша кодовая база не поддерживает синтаксис 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