rxjs catcherror在管道之前出现

时间:2019-11-17 15:06:02

标签: rxjs

我在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”,但是第二个不记录任何内容,没有发现错误...

1 个答案:

答案 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