更新后如何使用管道编写rxjs catch和map函数

时间:2019-01-25 21:59:34

标签: angular typescript rxjs

由于rxjs已更新,所以我的代码不再起作用。我意识到我需要使用管道而不是catch catchError,但是仍然缺少一些东西。请参见下面的代码。感谢您的帮助。

  public getAllTodos(): Observable<Todo[]> {
    return this.http.get(API_URL + '/todos')
    .pipe(
      map(response => {
       const todos = response.json();
       return todos.map((todo) => new Todo(todo));
      }),
      catchError(err => {
        this.handleError(err);
      })
   );
  }



    private handleError (error: Response | any) {
    console.error('ApiService::handleError', error);
    return Observable.throw(error);
  }

1 个答案:

答案 0 :(得分:1)

欢迎来到stackoverflow。

使用更新的HttpClient模块,我们不再需要使用.json语法。像这样:

  public getAllTodos(): Observable<Todo[]> {
    return this.http.get<Todo[]>(API_URL + '/todos')
    .pipe(
      catchError(err => {
        this.handleError(err);
      });
  }

或者如果您仍然需要映射到实际对象:

  public getAllTodos(): Observable<Todo[]> {
    return this.http.get<Todo[]>(API_URL + '/todos')
    .pipe(
      map(todos => todos.map((todo) => new Todo(todo))),
      catchError(err => {
        this.handleError(err);
      })
   );
  }