require-await
Запретить асинхронные функции, в которых отсутствует выражение await
Некоторые проблемы, выявленные этой правилом, могут быть исправлены вручную с помощью предложений редактора suggestions
Асинхронные функции в JavaScript ведут себя иначе, чем другие функции, по двум важным причинам:
- Значение возврата всегда является
Promise. - Вы можете использовать оператор
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.
Примеры неправильного кода для этого правила:
/*eslint require-await: "error"*/
() {
doSomething();
}
bar(async () {
doSomething();
});
Примеры правильного кода для этого правила:
/*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 вместо обещания.
Если вы выбрасываете ошибку внутри асинхронной функции для этой цели, то вы можете отключить это правило.
Связанные правила
Версия
Это правило было добавлено в ESLint v3.11.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/require-await