首先,我想明确地说,我知道Rx throwError运算符和JS的throw关键字之间的区别。我只是想知道为什么要使用throwError运算符?通过创建一个新的可观察对象,我所做的就是在第二个人订阅该错误时抛出错误?
长话短说,为什么我要这样做:
.catchError(err => throw "error!!")
对此:
.catchError(err => return thorwError("error!!"))
谢谢!
答案 0 :(得分: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
});
两种方式的输出相同。请注意,根据Observable contract,在两种情况下都不会调用完成处理程序。
答案 1 :(得分:0)
在管道运算符中使用 throwError 可能有问题,因为 throwError observable 可能会根据后续操作在管道中传递。有关详细信息,请参阅本文:https://medium.com/angular-in-depth/throwerror-is-not-throw-error-ad6c76c53377