在.catch()
内,如何找到导致错误的值?
例如,假设你有这样的代码:
Rx.Observable.of(42)
.map((val) => {
throw new Error('oops!');
})
.catch((err) => {
// how can I get `42` here?
});
你怎么知道最终导致错误的原因?
对于奖励积分,这可能是.finally()
吗?
答案 0 :(得分:2)
如果您想要该值,请将其传递给您的例外。
Rx.Observable.of(42)
.map((val) => {
throw new AppError({message : 'oops!', contextInfo : {someName: 42}});
})
.catch((err) => {
// get it from the `err` object
});
这要求您实现自己的错误(AppError
),该错误继承自本地Error
。此技术并非特定于Rxjs
,但可以应用于任何地方。 Error
是一个对象,您可以通过继承添加任何您认为合适的字段。错误包括有关错误的何时(跟踪)/何处(责备分配)/原因(诊断)方面的任何相关信息是一种好习惯。
关于如何创建自己的错误,请查看Custom_Error_Types。
finally
运算符使用不带任何参数的选择器函数。因此,如果可以在finally
中执行此操作,则不会通过参数传递。你可能仍然可以通过关闭来做到这一点,但这远非我推荐的东西。
<强>更新强>
参考How can you know what ended up causing the error?
,在一般情况下,你不能。就像promises一样,错误会传播到捕获它们的位置,否则最终会冒充出promise /可观察的上下文。因此,通常的技术适用,fail fast
技术最有效: