【发布时间】:2017-08-13 04:03:11
【问题描述】:
假设这个 Angular 2 sn-p:
export class ApiService {
// do stuff
request(...): Observable<Response> {
return this.http.request(...)
.share()
.catch((error: any) => {
let errMsg = 'my error';
// do more stuff...
// tried: throw errMsg;
// tried: return Observable.throw(errMsg);
});
}
}
然后:
api.request(...).catch(() => {
console.log('caught');
return Observable.from([]);
}).subscribe({
console.log('everything fine');
});
当请求成功时,传递给subscribe 的next 回调确实会被正常调用,但传递给catch 的回调却没有。
我已经尝试在具有不同职责的代码的两个不同部分中处理错误。我希望ApiService.request 抛出的错误消息最终会出现在第二个回调中,这样我就可以进一步完善我对用户的响应。我试过throw errMsg 和返回Observable.throw(errMsg)。
我将.share() 用于可观察对象的原因是我不希望 http 客户端为每个订阅者生成一个请求。
我哪里弄错了?
编辑:
我上面的例子并没有真正抓住我遇到的问题。这第二个 sn-p 允许复制它:
const a = Rx.Observable.create(function(observer){
observer.error('h');
}).share().catch(err=> {
console.error('first place',err);
throw 'err'
})
.subscribe(() => null)
.subscribe(console.log, console.error);
第一个订阅者未能捕捉到错误(由于没有定义错误处理程序)并中断了到第二个订阅者的链。
【问题讨论】:
标签: angular typescript rxjs