Spec-Zone.ru › ESLint

no-promise-executor-return

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

💡 есть предложения

Некоторые проблемы, о которых сообщает это правило, можно исправить вручную с помощью предложений редактора

Конструктор new Promise принимает один аргумент, называемый исполнителем.

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

Функция-исполнитель обычно инициирует асинхронную операцию. После её завершения исполнитель должен вызвать resolve с результатом или reject, если произошла ошибка.

Возвращаемое значение функции-исполнителя игнорируется. Возврат значения из функции-исполнителя может быть ошибкой, поскольку возвращённое значение нельзя использовать, и оно никак не влияет на Promise.

Подробности правила

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

Разрешён только return без значения, поскольку это оператор управления потоком.

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

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

new Promise((resolve, reject) => {
    if (someCondition) {
        return defaultResult;
    }
    getSomething((err, result) => {
        if (err) {
            reject(err);
        } else {
            resolve(result);
        }
    });
});

new Promise((resolve, reject) => getSomething((err, data)=>{if(err){reject(err);}else{resolve(data);}}));

new Promise(() => {
    return 1;
});

new Promise(r => r(1));

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

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

// Turn return inline into two lines
new Promise((resolve, reject) => {
    if (someCondition) {
        resolve(defaultResult);
        return;
    }
    getSomething((err, result) => {
        if (err) {
            reject(err);
        } else {
            resolve(result);
        }
    });
});

// Add curly braces
new Promise((resolve, reject) => {
    getSomething((err, data) => {
        if (err) {
            reject(err);
        } else {
            resolve(data);
        }
    });
});

new Promise(r => { r(1) });
// or just use Promise.resolve
Promise.resolve(1);

Параметры

Это правило принимает один параметр — объект со следующими свойствами:

  • allowVoid: Если установлено значение true (по умолчанию — false), это правило разрешает возвращать значения void.

allowVoid

Примеры правильного кода для этого правила с параметром { "allowVoid": true }:

Открыть в Playground
/*eslint no-promise-executor-return: ["error", { allowVoid: true }]*/

new Promise((resolve, reject) => {
    if (someCondition) {
        return void resolve(defaultResult);
    }
    getSomething((err, result) => {
        if (err) {
            reject(err);
        } else {
            resolve(result);
        }
    });
});

new Promise((resolve, reject) => void getSomething((err, data) => {
    if (err) {
        reject(err);
    } else {
        resolve(data);
    }
}));

new Promise(r => void r(1));

Связанные правила

  • no-async-promise-executor

Версия

Это правило добавлено в ESLint v7.3.0.

Дополнительная литература

Promise — JavaScript | MDN
developer.mozilla.org

Ресурсы

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

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

Spec-Zone.ru

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