如何解决 angular 8 中 Observable 中的捕获错误?

Ash*_*uti 16 typescript angular angular8

我做了错误处理程序代码,但我在 catch 中出错了。未定义的方法。

这是我的 serivce.ts 代码。

import { Injectable } from "@angular/core";
import { HttpClient, HttpErrorResponse } from "@angular/common/http";
import { user } from "./user";
import { Observable } from "rxjs";
import "rxjs/add/operator/catch";
import "rxjs/add/Observable/throw";
@Injectable({
  providedIn: "root"
})
export class DemoService {
  private url: string = "/assets/demo/user.json";
  constructor(private http: HttpClient) {}

  getuserdetails(): Observable<user[]> {
    return this.http.get<user[]>(this.url).catch(this.errorHandler);
  }
  errorHandler(error: HttpErrorResponse) {
    return Observable.throw(error.message || "server error.");
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 app.component.ts 文件代码

 public userdetails = [];
  public errorMsg;
  constructor(private user: DemoService) {}
  ngOnInit() {
    this.user
      .getuserdetails()
      .subscribe(
        $data => (this.userdetails = $data),
        error => (this.errorMsg = error)
      );
  } 
Run Code Online (Sandbox Code Playgroud)

我在捕获错误。并且错误消息是“Observable”类型上不存在“catch”属性。

Sud*_*nda 15

您可以使用catchErrorrxjs/operators此。尝试如下。

import { catchError } from 'rxjs/operators';

export class DemoService {

    getuserdetails(): Observable<user[]> {
        return this.http.get<user[]>(this.url)
            .pipe(catchError(this.errorHandler))
    }
    errorHandler(error: HttpErrorResponse) {
        return Observable.throw(error.message || "server error.");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你好呀。我的代码与您在此答案中发布的代码大致相同,但 catchError() 不起作用。即使服务器返回代码为 500,它也不会抛出任何内容。 (3认同)

Dav*_*vid 6

在 rxjs 的最新版本中,您应该使用:

return return this.http.get<user[]>(this.url)
                  .subscribe((r:Author) => console.log("GOOD"),
                                    err => console.log("ERROR))
Run Code Online (Sandbox Code Playgroud)


Nin*_*oni 5

import { Observable, throwError } from 'rxjs';
import { catchError, } from 'rxjs/operators';

return this.http.get<user[]>(this.url).pipe(catchError(this.errorHandler))

errorHandler(error: HttpErrorResponse) {
    return throwError(error.message || "server error.");
}
Run Code Online (Sandbox Code Playgroud)