我在rxjs上发现了一些奇怪的行为,我想知道这是否是预期的行为,或者是否错过了某些事情(我使用angular,但我认为这无关紧要):
public someFunction() {
// this woks as expected: log "test1"
return of(null).pipe(
switchMap(() => this.errorTest()),
catchError((e: Error) => {
console.log('test1');
return throwError(e);
})
);
// "test2" is never logged
return this.errorTest().pipe(
catchError((e: Error) => {
console.log('test2');
return throwError(e);
})
);
}
private errorTest(): Observable<any> {
throw Error('one error');
}
当我订阅someFunction时,第一个函数记录“ test1”,但是第二个不记录任何内容,没有发现错误...
答案 0 :(得分:1)
private errorTest(): Observable<any> {
throw Error('one error');
}
不返回可观察值。
switchMap(() => this.errorTest())
从回调函数中捕获错误。
switchMap(() => throw Error('one error'))
与您的示例相同,并且this.errorTest().pipe()
从未返回,因此您不会因尝试在未定义的上调用.pipe()
而收到错误>。
您想做的就是这个。
private errorTest(): Observable<any> {
return throwError(new Error('one error'));
}
https://rxjs-dev.firebaseapp.com/api/index/function/throwError