【发布时间】:2021-12-28 18:32:57
【问题描述】:
我有一个可能会失败的异步函数:
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);
})();
如何重构这段代码?
【问题讨论】:
-
首先使用 .then .catch 或 async await ,不要混用
-
“我需要重构这一行”如何重构呢?我不确定目标是什么。
-
@RandyCasburn 我认为这只是一个拒绝的异步函数的示例,而不是真正的代码。
-
你不只是想要
await f().catch(() => FALLBACK)。如果f()拒绝,那么您将替换FALLBACK对象作为结果。 -
嘿 Raul - 反模式不必要地将 Promise 对象包装在 Promise 对象中。在您提供的代码中,您从一个标记为异步函数的函数返回一个 Promise 对象 - 根据定义,这会强制该函数返回一个 Promise 对象。因此,正如您所指出的,
async关键字不是必需的 - 一切都已修复。
标签: javascript ecmascript-6 async-await