JavaScript重构:从异步函数返回结果或回退值中解构数据
代码重构方案
你的原有代码可运行,但存在可优化点:catch回调无返回值时默认返回undefined,如果函数f执行成功但返回了null/undefined,也会触发空值合并运算符??的回退逻辑,不符合「仅执行失败时用回退」的要求,且逻辑拆分冗余。
最简重构方案(链式catch)
直接在catch回调中返回回退值,省略额外的空值合并判断,逻辑更直接:
function f() { return new Promise((_, r) => r("Ups")); } const FALLBACK = { name: "Raul" }; (async () => { const { name } = await f().catch(() => FALLBACK); console.log(name); })();
该写法完全匹配需求:只要f执行抛出错误进入catch,就直接返回FALLBACK用于解构;如果执行成功,就用f的返回值解构。
高可读性方案(try catch)
如果后续需要添加错误日志打印、不同错误类型对应不同回退值等扩展逻辑,推荐用标准try catch结构:
function f() { return new Promise((_, r) => r("Ups")); } const FALLBACK = { name: "Raul" }; (async () => { let result; try { result = await f(); // 可添加执行成功的额外逻辑 } catch (err) { // 可扩展错误处理逻辑,比如打印错误日志 result = FALLBACK; } const { name } = result; console.log(name); })();
内容的提问来源于stack exchange,提问作者Raul
相关产品推荐
相关产品推荐

