0

我正在使用 observables 进行 Http 调用,它一直运行良好,但后来我改变了我的控制器并注意到我的代码显然没有处理错误。

这是我的服务(SellingMenuService)中的代码:

public getVarieties(): Observable<any> {
    return this.http.get(this.varietyListUrl).map(response => {
        return response.json();
    }, (error: any) => {
        console.log(error);
        console.log('error finding variety list');
        // TODO: implement error handling here.
    });
}

这是我的组件中的相关代码:

constructor(public sellingMenuService: SellingMenuService) { }

getVarietyList(): void {        
    this.sellingMenuService.getVarieties().subscribe(res => {            
        console.log(res);
        this.varieties = res;
    });         
}

以下是我的控制台中的一些错误: 在此处输入图像描述

如果我收到 500 错误,我上面的服务中的那些控制台日志不应该受到打击吗?他们为什么不呢?

4

2 回答 2

1

您试图在map方法中捕获错误,而您应该在subscribe.

public getVarieties(): Observable<any> {
    return this.http.get(this.varietyListUrl).map(response => {
        return response.json();
    }).subscribe((res: any) => {
        console.log(res);
    }, (error: any) => {
        console.log(error);
        console.log('error finding variety list');
        // TODO: implement error handling here.
    });
}

您还可以将第三个参数添加到 observable。当 observable 为finalized

public getVarieties(): Observable<any> {
    return this.http.get(this.varietyListUrl).map(response => {
        return response.json();
    }).subscribe((res: any) => {
        console.log(res);
    }, (error: any) => {
        console.log(error);
        console.log('error finding variety list');
        // TODO: implement error handling here.
    }, () => {
        console.log("finalized")
    });
}

你可以在这里阅读更多: http ://reactivex.io/rxjs/class/es6/Observable.js~Observable.html

于 2016-10-27T18:36:28.840 回答
1

你似乎有你的错误处理逻辑在里面map()

import 'rxjs/add/operator/catch';

return this.http.request(request)
  .map(res => res.json())
  .subscribe(
    data => console.log(data),
    err => console.log(err),
    () => console.log('yay')
  );

请参阅:如何从 http.request() 正确捕获异常?

于 2016-10-27T18:26:34.203 回答