完全没有在Observable订阅方法中调用

时间:2018-04-09 23:47:05

标签: javascript angular rxjs angular2-directives angular-observable

我正在处理角度应用程序,我正在尝试使用RxObservable。以下是示例代码。

getMyData(){
 console.log('get my account data called');
  this.AccountService
    .getMyAccountData()
    .filter(_res => _res !== null)
    .takeUntil(this.ngUnsubscribe)
    .subscribe(_response => {
        console.log('call finished');
      },
      error => {
        console.log('had an error');
        handleHttpError(error);
      },
      () => {
        console.log('account data loaded is being set');
        this.accountDataLoaded = true;
      });
}

现在这是一个角度2应用程序(单页面应用程序)。当我重新加载页面时,上面函数的完整部分被调用,this.accountDataLoaded为true。

但是,如果我转移到其他组件并返回到此组件,则不会调用complete并且accountDataLoaded保持为false。

我看到控制台上没有错误,因为我正在记录错误,如上所示。

我在想这个observable上的filter或takeUntil函数导致了这个但是我不确定。

1 个答案:

答案 0 :(得分:1)

如果发生错误,则不调用RXjs行为完成。 根据您的情况,您需要执行以下操作。

  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;
       }
    }).add(() => {
         //Called when operation is complete (both success and error)
    });
}