JavaScript中能否在处理异常时执行对象解构?
在JavaScript的try/catch中同时实现对象解构与异常处理
当然可以做到!你碰到的语法问题,是因为JavaScript会把语句开头的{ body }解析成代码块,而不是解构赋值表达式。这里有两种简单又优雅的解决方法:
方法一:给解构赋值加上括号
只需要给解构表达式套一对括号,就能让JavaScript把它识别成赋值操作,而不是代码块:
let body; let err; try { ({ body } = await networkRequest(...)); // 现在语法合法啦! } catch (e) { err = e; }
这个括号是关键——它改变了JavaScript的解析逻辑,把原本的块语句转换成了可赋值的表达式,解构就能正常工作了。如果需要解构多个属性,也可以直接扩展:
let body, status; let err; try { ({ body, status } = await networkRequest(...)); } catch (e) { err = e; }
方法二:先存临时变量再解构
如果你觉得括号的写法有点别扭,也可以先把请求结果存到一个临时变量里,再对它进行解构赋值:
let body; let err; try { const response = await networkRequest(...); ({ body } = response); } catch (e) { err = e; }
这种方式可读性更高,尤其是当你需要对返回值做额外校验或处理的时候,临时变量能让逻辑更清晰。
这两种方法都完美解决了你的需求:既用上了对象解构,又能把变量保留在try/catch的外部作用域,同时正常处理网络请求的异常。
内容的提问来源于stack exchange,提问作者kyle
相关产品推荐
相关产品推荐

