require-await
不允許沒有 await
表達式的 async 函式
💡 有建議
此規則報告的一些問題可透過編輯器建議手動修正
JavaScript 中的非同步函式在兩個重要方面與其他函式的行為不同
- 傳回值永遠是
Promise
。 - 您可以在其中使用
await
運算子。
使用非同步函式的主要原因通常是使用 await
運算子,例如這樣
async function fetchData(processDataItem) {
const response = await fetch(DATA_URL);
const data = await response.json();
return data.map(processDataItem);
}
不使用 await
的非同步函式可能不需要是非同步函式,可能是重構時無意間造成的結果。
注意:此規則會忽略 async generator 函式。這是因為 generator 會 yield 而不是傳回值,而 async generator 可能會 yield 另一個 async generator 的所有值,而實際上不需要使用 await。
規則詳細資訊
此規則會警告沒有 await
表達式的 async 函式。
此規則的錯誤程式碼範例
在遊樂場中開啟
/*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() {}
何時不使用它
非同步函式旨在與 Promise 一起使用,使得擲回錯誤會導致呼叫 Promise 的拒絕處理常式(例如 catch()
)。例如
async function fail() {
throw new Error("Failure!");
}
fail().catch(error => {
console.log(error.message);
});
在這種情況下,fail()
函式會擲回一個錯誤,該錯誤旨在稍後由指定的 catch()
處理常式捕獲。將 fail()
函式轉換為同步函式會需要重構對 fail()
的呼叫,以使用 try-catch
語句而不是 Promise。
如果您為了此目的在非同步函式中擲回錯誤,則可能需要停用此規則。
相關規則
版本
此規則在 ESLint v3.11.0 中引入。