需要在Observable订阅中使用超时以获取准确的数据

时间:2019-04-05 03:24:21

标签: angular observable ngrx

我在名为settingssettingsLoading的容器中有两个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);
        }
    });
}

2 个答案:

答案 0 :(得分:0)

当一个可观测值取决于另一个可观测值的结果时,则可以使用RxJS运算符,例如switchMap。

答案 1 :(得分:0)

如果您订阅另一个订阅,则可以正常工作,而不会超时!!!

但是对于重构代码,您可以使用mergeMap或switchMap。

请参见以下代码:How to refactor a subscribe inside a subscribe in rxjs

致谢!