Хобрук: Ваш путь к мастерству в программировании

Как решить ошибку отлова в Observable в angular 8?

Я делаю код обработчика ошибок, но получаю ошибку в catch. неопределенный метод.

Это мой код service.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.");
  }
}

Это мой код файла app.component.ts

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

У меня ошибка в catch. и сообщение об ошибке: свойство «поймать» не существует для типа «наблюдаемый».


  • вы можете сделать это так же, как вы делаете в ngOnInit в app.component как error => (this.errorMsg = error) но почему вы пытаетесь поймать ошибку в двух местах? вы должны поймать ее только в service 09.10.2019
  • в файле service.ts я определяю перехват и (this.errorMsg=error) находится в моем файле app.component.ts, используя этот файл, я отображаю данные и сообщение об ошибке на стороне клиента. 09.10.2019
  • Возможный дубликат: stackoverflow.com/questions/46019771/ 09.10.2019

Ответы:


1

Для этого вы можете использовать catchError в rxjs/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.");
    }
}
09.10.2019
  • Всем привет. У меня есть примерно тот же код, который вы разместили в этом ответе, но catchError() не будет работать. Он просто ничего не выдает, даже если с сервера возвращается код 500. 22.05.2020

  • 2

    в последней версии rxjs вы должны использовать:

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

    3

    Лучший способ поймать ошибку в наблюдаемом:

    this.http.get<user[]>(this.url).pipe(
       tap(),
       catchError(err => { return this.errorHandler(err) }
    )
    

    Если this.http.get() является обещанием, то, как вы это сделали в своем коде, .catch(...) в порядке. Попробуйте поставить catchError(...) в конце пайпа или перед finalize(..), если вы его используете.

    До того, как у Observables не было .pipe() и You, где операции цепочки, как в Promises, поэтому они меняют имя .then() на, я думаю, flatMap() и .catch() на catchError() Так что программист знает, является ли это Observable или Promise.

    09.10.2019
    Новые материалы

    Что такое структура данных?
    Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

    мои январские чтения по программированию
    Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

    Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
    Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

    Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
    На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

    Введение в машинное обучение для обнаружения аномалий (часть 1)
    Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

    Начало работы с Pulumi в Digital Ocean
    Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..

    #Day68 из #100days_of_coding
    Вчера был мой 68-й день кодинга. я решил один вопрос Проблема: Разбить двоичную строку на подстроки с равным количеством нулей и единиц Дана двоичная строка str длины N . Задача состоит..