Spec-Zone.ru › ESLint

require-await

Запретить асинхронные функции, в которых отсутствует выражение await

💡 hasSuggestions

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

Асинхронные функции в 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, возможно, не нуждаются в асинхронном формате и могут быть непреднамеренным результатом рефакторинга.

Примечание: это правило игнорирует асинхронные генераторные функции. Это связано с тем, что генераторы возвращают значения посредством yield, а асинхронные генераторы могут возвращать все значения другого асинхронного генератора, без необходимости фактического использования 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();
});

// 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