首先我想说清楚我知道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)
谢谢!
在这种情况下,语法是唯一的区别。没有理由使用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 合约,在这两种情况下都不会调用完成处理程序。
归档时间: |
|
查看次数: |
1442 次 |
最近记录: |