Spec-Zone.ru › ESLint

no-promise-executor-return

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

💡 hasSuggestions

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

Конструктор 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.

Допускается только 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), это правило позволит возвращать пустые значения.

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

Источники

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

© 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