【发布时间】:2018-09-19 11:02:53
【问题描述】:
我正在开发 Angular 应用程序,我正在尝试使用 RxObservable。下面是示例代码。
getMyData(){
console.log('get my account data called');
this.AccountService
.getMyAccountData()
.filter(_res => _res !== null)
.takeUntil(this.ngUnsubscribe)
.subscribe({
next: _response => {console.log('call finished');}
error: error => {
console.log('had an error');
handleHttpError(error);
},
complete: () => {
console.log('account data loaded is being set');
this.accountDataLoaded = true;
}
});
}
现在这是一个 Angular 2 应用程序(单页应用程序)。当我重新加载页面时,上述函数的完整部分被调用并且 this.accountDataLoaded 为真。
但是,如果我移动到其他组件并返回到这个组件,则不会调用 complete 并且 accountDataLoaded 保持为 false。
我看到控制台上也没有错误,因为我正在记录错误,正如您在上面看到的那样。
我认为该 observable 上的 filter 或 takeUntil 函数会导致该问题,但我不确定。
【问题讨论】:
-
告诉我们你在哪里调用这个函数,也告诉我们
ngUnsubscribe -
您能告诉我们您是如何设置组件的以及如何在其中调用此方法吗?
-
我不确定为什么
complete在没有更多上下文的情况下不会被触发,但如果这是来自 HTTP 调用的可观察对象,则 HTTP 可观察对象总是触发一次然后完成,因此您通常不会除了success之外,还需要使用complete回调。 -
由于这里您没有保存此订阅,因此 ngUnsubscribe 不在上下文中。无论调用多少次,帐户数据都“不应”为空。在服务调用中放置一个调试器,看看它是否被正确命中。看起来其他一些条件正在阻止调用甚至发生
-
您也可以注释掉过滤器和 takeUntill 调用,以查看您的服务调用是否在其他情况下发生......只是为了查明可能是什么问题
标签: javascript angular rxjs angular2-directives angular-observable