在.catch()
裏面,我如何找到導致錯誤的值?在RxJS中,如何獲得導致錯誤的值?
例如,假設你有這樣的代碼:
Rx.Observable.of(42)
.map((val) => {
throw new Error('oops!');
})
.catch((err) => {
// how can I get `42` here?
});
你怎麼能知道是什麼最終導致了錯誤?
加分,這是可能的.finally()
?
在.catch()
裏面,我如何找到導致錯誤的值?在RxJS中,如何獲得導致錯誤的值?
例如,假設你有這樣的代碼:
Rx.Observable.of(42)
.map((val) => {
throw new Error('oops!');
})
.catch((err) => {
// how can I get `42` here?
});
你怎麼能知道是什麼最終導致了錯誤?
加分,這是可能的.finally()
?
如果你想要的值,傳遞它在你的例外。
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
是一個對象,您可以通過繼承添加您認爲合適的任何字段。錯誤包含任何有關錯誤的when(tracing)/ where(blame assignment)/ why(diagnostics)方面的相關信息是一個好習慣。
關於如何創建自己的錯誤,看看Custom_Error_Types。
finally
操作者使用不帶任何參數的選擇器的功能。因此,如果在finally
中可以這樣做,它將不會通過參數傳遞。你可能仍然可以通過關閉來完成,但這遠非我所推薦的。
UPDATE 參照How can you know what ended up causing the error?
,在一般情況下你不能。就像承諾一樣,錯誤會傳播到被捕獲的地方,或者最終從承諾/可觀察的上下文中冒出來。所以通常技術應用中,fail fast
的技術是最有成效:
這在錯誤不是您創建的情況下無效。我正在尋找一個通用的解決方案,所以我可以保證如果對象具有任何類型的錯誤,則特定於該對象的引用將被清除。 – JBCP
然後你應該提供一個更現實的例子,所以你可以理解你正在處理的一般情況。也就是說,即使錯誤不是你創建的錯誤,只要它具有'Error'類型,你仍然可以捕獲它並用本地數據擴展它,並在它是你的用例時重新拋出它。無論如何,你的清理必須發生在'catch'子句中,它不能發生在'finally'子句中。你能發表一個更好的例子嗎? – user3743222
什麼拋出價值? –