JS对象解构时能否将异步请求作为属性不存在或假值时的默认值?
问题解答
原实现逻辑不可行,核心存在两个问题:
- JavaScript对象解构的默认值仅在**被解构属性严格等于
undefined**时才会生效。你预期的是属性为任意假值(包括null、false、0、空字符串等)时就触发接口请求,但只要myObject.property不是undefined,哪怕是其他假值,默认值位置的await请求逻辑永远不会执行。 await关键字只能在async函数内部,或者ES模块的顶层作用域中使用,如果你的代码没有放在符合要求的执行上下文里,会直接抛出语法错误。
正确实现方案
如果你的需求是只要属性为假值就触发接口请求,可以参考如下写法:
// 注意代码需放在async作用域内执行 let { property } = myObject; if (!property) { property = await someMethodThatSendsRequest(); }
也可以简写为逻辑或的形式:
// 注意代码需放在async作用域内执行 const property = myObject.property || await someMethodThatSendsRequest();
如果你的需求调整为仅当属性为undefined或null时才触发接口请求,可以使用空值合并运算符:
// 注意代码需放在async作用域内执行 const property = myObject.property ?? await someMethodThatSendsRequest();
内容的提问来源于stack exchange,提问作者howard wolowitz
相关产品推荐
相关产品推荐

