我有一個可能失敗的異步函式:
const f = () => new Promise((_, reject) => reject("Ups"));
和 FALLBACK 值常量:
const FALLBACK = { name: "Raul" };
我正在嘗試從 f() 方法回應資料中解構 name 欄位,(因為,如果它沒有失敗,則回傳將是具有此欄位的物件),如果失敗,我將使用回退值.
我正在做以下事情:
function f() {
return new Promise((_, r) => r("Ups"));
}
const FALLBACK = { name: "Raul" };
(async () => {
const { name } = (await f().catch(() => {})) ?? FALLBACK; // I need to refactor this line
console.log(name);
})();
如何重構此代碼?
uj5u.com熱心網友回復:
看來你只是想要await f().catch(() => FALLBACK)。如果f()拒絕,那么您將替換 FALLBACK 物件作為結果
這是一個作業示例:
function f() {
return new Promise((_, r) => r("Ups"));
}
const FALLBACK = { name: "Raul" };
(async () => {
const { name } = await f().catch(() => FALLBACK);
console.log(name);
})();
有些人會不喜歡的混合.catch(),并await與建議使用try/catch的替代.catch()。兩者都可以 - 這是一種風格偏好。在這種特殊情況下,我發現.catch()看起來更簡單 - 但請遵循您自己的喜好。
另請注意,我async從f()定義中洗掉了。由于您沒有使用async函式的任何功能,因此它沒有必要或有用。
而且,請注意,有時.catch()甚至不記錄錯誤而盲目地將所有可能的錯誤都記錄下來是很危險的。像上游輸入錯誤這樣簡單的事情可能會導致它.catch()觸發,你會很困惑為什么你的代碼突然做它正在做的事情(因為你正在默默地吃一個你可能不打算吃的錯誤,你至少應該正在記錄)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358978.html
標籤:javascript ecmascript-6 异步等待
上一篇:當嘗試使用mousemoveeventListener在函式內顯示滑鼠坐標時,MouseEvent.clientX/Y回傳NaN
