Spec-Zone.ru › ESLint

require-await

Запрещает асинхронные функции без выражения await

💡 hasSuggestions

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

Асинхронные функции в JavaScript ведут себя иначе, чем другие функции, в двух важных аспектах:

  1. Возвращаемое значение всегда является Promise.
  2. Внутри них можно использовать оператор await.

Основная причина использовать асинхронные функции — обычно применение оператора await, например:

async function fetchData(processDataItem) {
    const response = await fetch(DATA_URL);
    const data = await response.json();

    return data.map(processDataItem);
}

Асинхронные функции, в которых не используется await, могут не нуждаться в асинхронности и быть случайным результатом рефакторинга.

Примечание: это правило не распространяется на асинхронные функции-генераторы. Это связано с тем, что генераторы выдают значения, а не возвращают их, и асинхронные генераторы могут выдавать все значения другого асинхронного генератора, не используя await.

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

Это правило выдаёт предупреждение об асинхронных функциях, в которых нет выражения await.

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

Открыть в Playground
/*eslint require-await: "error"*/

async function foo() {
    doSomething();
}

bar(async () => {
    doSomething();
});

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

Открыть в Playground
/*eslint require-await: "error"*/

async function foo() {
    await doSomething();
}

bar(async () => {
    await doSomething();
});

function baz() {
    doSomething();
}

bar(() => {
    doSomething();
});

async function resourceManagement() {
    await using resource = getAsyncResource();
    resource.use();
}

// Allow empty functions.
async function noop() {}

Параметры

У этого правила нет параметров.

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

Асинхронные функции предназначены для работы с промисами: при возникновении ошибки вызывается обработчик отклонения промиса (например, catch()). Например:

async function fail() {
    throw new Error("Failure!");
}

fail().catch(error => {
    console.log(error.message);
});

В этом случае функция fail() выбрасывает ошибку, которую должен перехватить обработчик catch(), назначенный позже. Преобразование функции fail() в синхронную потребовало бы рефакторинга вызова fail() с заменой промиса на оператор try-catch.

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

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

  • require-yield

Версия

Это правило появилось в ESLint v3.11.0.

Ресурсы

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

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/require-await

Spec-Zone.ru

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