如何在setTimeout外部获取其内部的this.fetchedData['__zone_symbol__value']值?
能否在setTimeout外部获取
this.fetchedData['__zone_symbol__value']的值? 当然可行,但有个关键前提——你得等this.fetchedData['__zone_symbol__value']这个值已经被赋值完成才行。
先给你拆解一下背景:__zone_symbol__value是Angular Zone内部用来存储异步操作结果的私有属性(比如包装过的Promise、Observable的最终值)。它不是一开始就存在的,得等对应的异步任务(比如HTTP请求、数据加载)完成后才会有实际值。
具体分两种情况来看:
- 如果异步任务已经完成:你在
setTimeout外部直接写const data = this.fetchedData['__zone_symbol__value']就能拿到值,和定时器里的效果完全一样。 - 如果异步任务还在进行中:这时候外部访问这个属性大概率拿到的是
undefined或者初始占位值,自然就取不到你想要的数据。
不过这里要提醒一句:直接访问__zone_symbol__value其实是不推荐的做法。这是Angular的内部私有实现细节,后续版本更新可能会修改这个属性名或者实现逻辑,到时候你的代码就可能崩掉。更好的方式是用Angular官方提供的异步处理方式:
- 如果
this.fetchedData是Promise:用await或者.then()来获取值// 用async/await async fetchData() { const actualData = await this.fetchedData; console.log(actualData); } // 或者用.then() this.fetchedData.then(actualData => { console.log(actualData); }); - 如果
this.fetchedData是Observable:通过.subscribe()来订阅获取值this.fetchedData.subscribe(actualData => { console.log(actualData); });
这样既安全又符合Angular的最佳实践,不用依赖内部私有属性~
内容的提问来源于stack exchange,提问作者Atul Stha
相关产品推荐
相关产品推荐

