在我的项目中,我使用RxJS
来处理HTTP请求。关于错误处理部分,我对此感到困惑:
.switchMap((evt: any) => {
return http.getComments(evt.params)
.map(data => ({ loading: false, data }))
.catch(() => {
console.log('debugging here');
return Observable.empty();
});
})
在上面的代码中,在switchMap
运算符中,我使用http.getComments
函数发送请求,我自己定义如下:
getComments(params) {
return Observable.fromPromise(
this.io.get(path, { params })
);
}
在这个函数中,我使用fromPromise
运算符将返回的Promise转换为observable。
问题是当HTTP请求失败时,catch
内的switchMap
运算符无法工作,调试控制台无法输出。那么我的代码有什么问题。
答案 0 :(得分:1)
你真的需要抓住switchMap
内的错误吗?如果需要,您可以在源代码中处理错误。
.switchMap((evt: any) =>
http.getComments(evt.params).map(data => ({ loading: false, data }))
})
.subscribe(console.log, console.error);
任何方式,您的源代码看起来都没有任何错误,也许您的承诺在http失败时没有被拒绝,只是因为错误作为回应而解决(这是猜测,因为我已经看过了那之前)
答案 1 :(得分:0)
您的代码应该有效。这是一个简化的模拟,其中http调用由引发错误的函数代替。
f<-function(df,list_rows)
{
return(df[unlist(list_rows[df[1,1]]),])
}
lapply(list_data,f,list_rows=list_rows)
[[1]]
ID Name1 Name2 Name3 Name4
1 1 3 4 6 8
4 1 2 5 7 9
[[2]]
ID Name4 Name2 Name3 Name1
1 2 7 3 2 1
[[3]]
ID Name3 Name1 Name4 Name2
1 3 6 2 3 2
3 3 6 2 3 2
6 3 6 2 3 2
[[4]]
ID Name2 Name3 Name1 Name4
2 4 7 1 1 3
3 4 7 1 9 3