可观察的订阅始终执行,即使发生错误

时间:2018-12-11 22:36:18

标签: angular rxjs

我正在建立一个与许多API聊天的Angular网站,并且我一直遵循Angular docs尝试并使用最佳实践来发出HTTP请求并处理后续的成功与失败。

我已经对其中一个API进行了硬编码以返回500错误,并且可以通过在{{中使用500定义在Angular应用中成功处理该catchError 1}},在HTTP服务调用之后,代码如下:

pipe

我遇到的问题是,当我使用以下代码调用updateRemoteUserProfile(userProfile: UserProfile): Observable<UserProfile>{ return this.http.put<UserProfile>(AuthService.userProfileApi, userProfile).pipe( catchError(this.handleError<UserProfile>('updateUserProfile', 'Error', 'Error updating profile', userProfile)) ); } private handleError<T> (operation = 'operation', title, notification, result?: T) { return (error: any): Observable<T> => { this.toastrService.error(notification, title); console.error(error); return of(result as T); }; } 时,subscribe方法始终执行,并且成功举杯消息与错误一同时弹出:

updateRemoteUserProfileMethod

我确定我缺少了一些非常简单和基本的内容,但是这些内容都是基于Angular文档,所以我现在很茫然。

非常感谢

2 个答案:

答案 0 :(得分:3)

好吧,catchError就是这样:您正在捕获错误,因此不再有错误。

如果您要传播错误,请

  • 不要抓到它,或者
  • 使用tap(null, handler)传播原始错误,但在发生原始错误时增加副作用(例如记录或烘烤错误),或者
  • throwError(...)返回catchError而不是of(...)引发与原始错误不同的错误

答案 1 :(得分:0)

我们还可以返回EMPTY()observable,它将通过执行subscribe complete方法来完成observable。

import {empty} from 'rxjs';

private handleError<T> (operation = 'operation', title, notification, result?: T) {
    return (error: any): Observable<T> => {

      this.toastrService.error(notification, title);
      console.error(error);

      return empty();
    };
}