Javascript 我能在“之前捕捉到某些错误吗?”;订阅();在Angular2可以观察到的RXJS中?
基类在允许子类订阅Angular2中的可观察对象之前,是否有可能捕获某些错误 e、 gJavascript 我能在“之前捕捉到某些错误吗?”;订阅();在Angular2可以观察到的RXJS中?,javascript,angular,rxjs,observable,Javascript,Angular,Rxjs,Observable,基类在允许子类订阅Angular2中的可观察对象之前,是否有可能捕获某些错误 e、 g .catch()是正确的 Observable是惰性的,因此在订阅之前没有错误。不确定您是否指这种“之前”,因此我提到它只是为了确定。单独使用catch没有多大帮助,因为您订阅了客户端代码,并且必须从catch返回可观察的 我将按以下方式实施: Rx.Observable.of(42) .do(v=>{throw new Error('test')}) .catch(Rx.Observable.of(u
.catch()
是正确的
Observable
是惰性的,因此在订阅之前没有错误。不确定您是否指这种“之前”,因此我提到它只是为了确定。单独使用catch
没有多大帮助,因为您订阅了客户端代码,并且必须从catch
返回可观察的
我将按以下方式实施:
Rx.Observable.of(42)
.do(v=>{throw new Error('test')})
.catch(Rx.Observable.of(undefined))
.filter(v=>{return v !== undefined})
.subscribe(
(e)=>{console.log('next', e)},
(e)=>{console.log('error', e)},
()=>{console.log('complete')}
);
令人惊叹的。非常感谢。渔获物是否应归还任何东西?Typescript抱怨此设置(即使它确实工作),您可以在.catch()
中处理此错误,否则可观察的
将继续执行下一个事件。返回任何东西都是多余的。TypeScript到底是如何抱怨的?“type(response:any)=>void
的参数不可分配给type(err:any,source:Observable,capture:Observable)=>Observable
。typevoid
不可分配给typeObservable
”。如果我只是在\u handle401()
中返回新的Observable()
,这很酷,但那似乎很臭/知道了。我用我的答案更新了我的问题。
protected _get(url: string, data?: any): Observable<any> {
return super._get(url, data, this._authorizationHeader)
.map(response => response.json())
.catch(response => this._handle401(response));
}
private _handle401(response: Response): Observable<any> {
try {
if(response.status === 401) {
this._router.navigateByUrl('/login');
return Observable.throw(response.status);
}
} catch(err) {
console.warn('AuthenticatedHttpService._handle401');
console.error(err);
}
return Observable.of(response);
}
Rx.Observable.of(42)
.do(v=>{throw new Error('test')})
.catch(Rx.Observable.of(undefined))
.filter(v=>{return v !== undefined})
.subscribe(
(e)=>{console.log('next', e)},
(e)=>{console.log('error', e)},
()=>{console.log('complete')}
);