RxJS - 为什么我要使用 throwError 而不是简单地抛出错误?

Ris*_*skX 6 javascript rxjs

首先我想说清楚我知道Rx throwError 操作符和JS 的throw 关键字的区别。我只是想知道为什么要使用 throwError 运算符?通过创建一个新的 observable 我得到了什么,它所做的就是在任何人订阅它时抛出一个错误?

长话短说,我为什么要这样做:

.catchError(err => throw "error!!")
Run Code Online (Sandbox Code Playgroud)

在这个:

.catchError(err => throwError("error!!"))
Run Code Online (Sandbox Code Playgroud)

谢谢!

Wou*_*pen 0

在这种情况下,语法是唯一的区别。没有理由使用throw来代替throwError或反之亦然。与您的团队选择一种方法并坚持下去。

证明

// Error using reactive throwError
// logs error 'oops!!'
of(1)
    .pipe(
        switchMap(
           (x) => throwError('oops!!'))
        )
    .subscribe({
        next: console.log,  // not called
        error: console.error, 
        complete: () => console.log('complete!'),  // not called
    }); 

// Error using imperative throw
// logs error 'oops!!'
of(1)
    .pipe(
        switchMap((x) => {
            throw 'oops!!';
        })
    )
    .subscribe({
        next: console.log,  // not called
        error: console.error,
        complete: () => console.log('complete!'), // not called
    }); 
Run Code Online (Sandbox Code Playgroud)

两种方式的输出是相同的。请注意,根据Observable 合约,在这两种情况下都不会调用完成处理程序。