【问题标题】:How to use operator in Rxjs 6 in Angular如何在 Angular 的 Rxjs 6 中使用运算符
【发布时间】:2018-08-05 08:14:49
【问题描述】:

我需要一些关于 Rxjs Operators 的帮助。我在 Angular 6 项目中工作。 Rxjs 版本为 6.1.0 我在导入 Rxjs Operator 时遇到了问题。所以我执行这个声明,希望能解决我的问题。

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?这里有什么问题。

【问题讨论】:

  • 你必须在管道中使用catchError,就像你使用map一样
  • 您将 5 及更早版本的方法名称与 6 所需的可管道运算符函数混合在一起。.catch 已重命名为 catchError,否则它会与同名(另见.do -> tap,例如 - github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/…)。
  • 另外,map(res =&gt; res) 的意义何在。你明白那是做什么的吗?

标签: angular rxjs angular6


【解决方案1】:

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

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

【讨论】:

  • i 「wdm」: Compiled successfully. ERROR in src/app/services/post.service.ts(17,10): error TS2339: Property 'catchError' does not exist on type 'OperatorFunction&lt;{}, {}&gt;'. src/app/services/post.service.ts(17,29): error TS2304: Cannot find name 'HttpErrorResponse' 现在是错误。
  • 您可以更新问题中的代码吗?它应该可以正常工作:stackblitz.com/edit/…
猜你喜欢
  • 2019-01-25
  • 2019-11-07
  • 2021-01-16
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
相关资源
最近更新 更多