使用catchError运算符捕捉Angular 9中的错误

时间:2020-10-31 14:45:40

标签: angular typescript error-handling rxjs

嗨,我尝试使用Rxjs运算符catchError捕获错误并发送有关日志的信息。下面显示了我的邮政服务中用于提取一些数据的函数:

fetchPosts() {
    const  url = 'some url';
    return this.http.get<{ [key: string]: Post }>(url)
      .pipe(
        map((responseData) => {
            const postArray: Post[] = [];
            for (const key in responseData) {
              if (responseData.hasOwnProperty(key)) {
                postArray.push({...responseData[key], id: key});
              }
            }
            return postArray;
          }, catchError(errorResponse => {
              // now we can send for example information to analytic serv
          this.logService.addNewLog(errorResponse.message);
          return throwError(errorResponse.message);
          })
        ));
  }

问题在于地图操作符无法使用。当我删除地图运算符时,它将可以正常工作。如下所示:

fetchPosts() {
    const  url = 'some url';
    return this.http.get<{ [key: string]: Post }>(url)
      .pipe(catchError(errorResponse => {
          this.logService.addNewLog(errorResponse.message);
          return throwError(errorResponse.message);
          })
        );
  }

如何解决此问题?我希望它可以与这两个运算符一起使用:map,catchError。我的代码有什么问题?我将不胜感激。

1 个答案:

答案 0 :(得分:2)

操作员必须单独输送。目前,您正在catchError运算符内的map中进行管道传递。尝试以下

fetchPosts() {
  const  url = 'some url';
  return this.http.get<{ [key: string]: Post }>(
    'https://http-request-learning.firebaseio.com/posts.json'
  ).pipe(
    map((responseData) => {
      const postArray: Post[] = [];
      for (const key in responseData) {
        if (responseData.hasOwnProperty(key)) {
          postArray.push({...responseData[key], id: key});
        }
      }
      return postArray;
    }),              // <-- close `map` here
    catchError(errorResponse => {
      // now we can send for example information to analytic serv
      this.logService.addNewLog("sss");
      return throwError(errorResponse.message);
    })
  );
}