web-dev-qa-db-fra.com

Méthode recommandée pour gérer les erreurs dans Angular2

Bonjour, j'essaie de recevoir une erreur envoyée par catch block (service). dans plusieurs composants, je dois afficher une fenêtre contextuelle avec le message d'erreur affiché. laissez-moi savoir comment créer une méthode générique et l'appeler à l'intérieur du bloc de service. Comme ce que je fais maintenant avec "showErrorPage ()".

import { Injectable } from '@angular/core';
import { Http, Headers, Response, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map'

@Injectable()
export class DataService {
    private reqData = {};
    private url: string;
    constructor(private http: Http) {
    }

    getResult(searchObject: {}): Observable<Response> {
        // some logic
        return this.http.post(<my url>, <data to be sent>)

        .map((response: Response) => {
            return response;
        })
        .catch((error: any) => {
            if (error.status === 302 || error.status === "302" ) {
                // do some thing
            }
            else {
              return Observable.throw(new Error(error.status));
            }
        });
    }
}

Et dans ma composante je l’appelle comme

import { Component,EventEmitter, Output, OnInit, OnDestroy } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
// importing DataService ';

@Component({
  selector: 'o-result',
  templateUrl: './o-result.component.html',
})

export class AComp implements OnInit {
    constructor(
        private dataService: DataService
    ){

    }

    ngOnInit() {
      this.dataService.getResult(<url>, <params>)
      .subscribe(
         response => {
             // doing logic with responce
         }
          ,
          error => {
            this.showErrorPage();
         }
      )

    }

    showErrorPage(): void {
      // displaying error in popup
    }
}
27
Vaibhav

Selon le guide de style angulaire

Les détails de la gestion des données, tels que les en-têtes, les méthodes HTTP, la mise en cache, le traitement des erreurs et la logique de nouvelle tentative, ne sont pas pertinents pour les composants ni pour les autres consommateurs de données.

Votre implémentation semble être la bonne.

De plus, la documentation http client fournit la même implémentation.

17
JEY