Observable中的错误处理程序未映射到JSON

时间:2016-02-18 17:50:14

标签: angular angular2-http

订阅中的错误回调未映射到JSON槽映射函数!为什么?

this.http.get("/something")
            .map((response: any) => response.json())
            .subscribe((response: any) => {
                  // response is body of request
            }, (error: any) => {
                // error must be mapped again
                let error = JSON.parse(error._body);
            });

2 个答案:

答案 0 :(得分:1)

实际上,在出现错误的情况下,不会调用map运算符指定的回调。您需要利用catch来做到这一点:

this.http.get("/something")
        .map((response: any) => response.json())
        .catch((response: any) => Observable.throw(response.json()))
        .subscribe((response: any) => {
              // response is body of request
        }, (error: any) => {
            // error must be mapped again
            let error = JSON.parse(error._body);
        });

答案 1 :(得分:1)

因为从get()返回的Observable有错误,所以未调用传递map()的函数(因为没有发出事件)。即,不调用箭头函数(response: any) => response.json()。相反,错误会传播直到有东西捕获它。如果没有捕获到错误,您将在浏览器控制台中看到异常。

您可以使用.catch()和/或在subscribe()中提供错误处理程序来捕获错误。

我尝试在此处创建一个强大的http错误处理程序:https://stackoverflow.com/a/35329086/215945
它捕获从.get().json()生成的错误。