我在名为settings
和settingsLoading
的容器中有两个Observable。我有一个API调用,它检索一些设置,并且该调用完成后,settingsLoading
将被设置为true,而settings
将包含来自API的数据。我正在将settings
数据传递给组件,并将settingsLoading
传递给与Observable相同的组件。
在该组件中,如下所示,我正在订阅settingsLoading
可观察的对象,一旦加载为false,我将创建几个控制台日志,以便查看现在应该设置的设置数据。控制台日志始终返回null,除非我将其包装为0秒的超时时间。为什么我需要这样做?这是处理此问题的可靠方法吗?有没有更好的方法可以避免超时?
在下面的代码中,第一个控制台日志将始终返回null,第二个控制台日志似乎总是具有我期望的数据:
subscribeToLoadSettings() {
this.settingsLoading.subscribe(loading => {
if (!loading) {
// This doesn't work
console.log('settings', this.settings);
setTimeout(() => {
// This works
console.log('settings', this.settings);
}, 0);
}
});
}
答案 0 :(得分:0)
当一个可观测值取决于另一个可观测值的结果时,则可以使用RxJS运算符,例如switchMap。
答案 1 :(得分:0)
如果您订阅另一个订阅,则可以正常工作,而不会超时!!!
但是对于重构代码,您可以使用mergeMap或switchMap。
请参见以下代码:How to refactor a subscribe inside a subscribe in rxjs
致谢!