订阅中的错误回调未映射到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);
});
答案 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()
生成的错误。