首页 > 解决方案 > 更新后如何使用管道编写 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);
  }

标签: angulartypescriptrxjs

解决方案


欢迎来到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);
      })
   );
  }

推荐阅读