如何在Angular的Rxjs 6中使用运算符

时间:2018-08-05 08:14:49

标签: angular rxjs angular6

我需要Rxjs运算符的帮助。我正在Angular 6 Project中工作。 Rxjs版本是6.1.0 我在Rxjs操作员导入中遇到了问题。因此,我执行该声明希望能解决我的问题。

Statement: npm install --save rxjs-compat

这是我的组件代码。

import { AppError } from './../common/validators/app-error';
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';
import { Observable } from "rxjs";
import { catchError, map } from "rxjs/operators";
import { HttpClient, HttpErrorResponse } from '@angular/common/http';


@Injectable({
  providedIn: 'root'
})
export class PostService {

  deletePost(id) {
    return this.http.delete(this.url + '/' + id)
      .pipe(
        map(res => res),
        catchError((error: HttpErrorResponse) => {
          Observable.throw(new AppError());
        }));
  }

  private url = 'https://jsonplaceholder.typicode.com/posts';

  constructor(private http: Http) { }

}

并且编译成功时出现此错误。

    i 「wdm」: Compiled successfully.
ERROR in src/app/services/post.service.ts(18,20): error TS2345: Argument of type '(error: HttpErrorResponse) => void' is not assignable to parameter of type '(err: any, caught: Observable<Response>) => ObservableInput<{}>'.
  Type 'void' is not assignable to type 'ObservableInput<{}>'.

如何成功使用Rxjs?这是什么问题。

1 个答案:

答案 0 :(得分:1)

您现在必须在catchError函数中使用pipe,如下所示:

deletePost(id) {
  return this.http.delete(this.url + '/' + id)
    .pipe(
       map(res => res),
       catchError((error: HttpErrorResponse) => {
         return Observable.throw(new AppError());
       }));
}