2017-01-20 12 views
2

this.authService.refreshToken()を呼び出すときに発生したエラーを処理したいと考えています。 switchmapブロック内でエラーを処理できるか、この場合エラーを処理するにはどうすればよいですか?Angular2 rxjs - スイッチマップキャッチエラー

post3(endpoint: string, body: string) : Observable<any> { 
    if (this.authService.tokenRequiresRefresh()) { 
     this.authService.tokenIsBeingRefreshed.next(true); 
     return this.authService.refreshToken().switchMap(
     data => { 
      this.authService.refreshTokenSuccessHandler(data); 
      if (this.authService.loggedIn()) { 
      this.authService.tokenIsBeingRefreshed.next(false); 
      return this.postInternal(endpoint, body); 
      } else { 
      this.authService.tokenIsBeingRefreshed.next(false); 
      this.router.navigate(['/sessiontimeout']); 
      Observable.throw(data); 
      } 
     } 
    ); 
    } 
    else { 
     return this.postInternal(endpoint, body); 
    } 
    } 
+1

を使用する: '(データ)Observable.throwを返します;' – cartant

答えて

12

ところで、あなたはリターンを必要とするcatch方法

this.authService.refreshToken() 
    .switchMap(() => {...}) 
    .catch((e) => { 
    // handle e and return a safe value or rethrow 
    if (isCritical(e)) { 
     return Observable.throw(e); 
    } 
    return Observable.of<any>([]); 
    }); 
関連する問題