首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理全局角度4错误

处理全局角度4错误
EN

Stack Overflow用户
提问于 2017-08-17 21:16:38
回答 2查看 1.3K关注 0票数 1

我们需要一种方法来处理全局角度错误,包括错误的http调用,比如401或500。

我看到有一个捕获全局角度异常的ErrorHandle类,但是该类没有检测到不正确的(例如,状态500 ) http调用。那么,有没有其他方法来处理这两种类型的错误,或者我需要创建从它们到另一个自定义服务的某种委托?

EN

回答 2

Stack Overflow用户

发布于 2017-08-17 21:22:37

因为您使用的是Angular 4,所以您可以使用新的HttpClient,并简单地为您的HTTP响应编写一个拦截器。在Angular docs for HttpClient中提供更多详细信息和示例。

编辑:添加了示例

代码语言:javascript
运行
复制
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http'
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(req).do(event => {}, err => {
            if (err instanceof HttpErrorResponse && err.status == 401) {
                // handle 401 errors
            }

            if (err instanceof HttpErrorResponse && err.status == 500) {
                // handle 500 errors
            }
        });
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-08-17 21:31:05

当您的服务将observable返回到您调用它的位置时,您可以这样做:

代码语言:javascript
运行
复制
this.myService.doSomething().subscribe(
   successfulPayload => { //do stuff with the good response },
   error => this._apiErrorHandler(error));

然后,在_apiErrorHandler中,您可以将错误分派到存储区,以便其他组件可以在知道存在错误的情况下执行它们需要执行的任何操作。

代码语言:javascript
运行
复制
private _apiErrorHandler(payload) {
   this.store.dispatch({ type: 'API_ERROR', payload });
}

由于这是一个api错误,您知道它会有一个类似state500的代码,因此有效负载有一个status属性和一个statusText属性(payload.status和payload.statusText)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45736163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档