[英]How to fix 'thrown exception caught locally' when using instanceof to determine internal errors type
我有一個加載一組插件的代碼塊。 對於每個插件,在 try catch 塊內調用函數列表以確定插件是否失敗並采取相應措施。 同時,插件的多個功能之一可以返回一個特定的錯誤,這意味着插件沒有失敗但不能用數據執行下一個功能。
讓我們看一個例子(代碼是 Typescript,但我將使其盡可能與語言無關):
for each plugin:
try:
plugin.function1(data)
plugin.function2(data)
plugin.function3(data)
try:
plugin.function4(data)
catch error:
if error instanceof PluginNotValidForThisKindOfDataError:
continue
else:
throw error
plugin.function5(data)
plugin.function6(data)
catch error:
log(plugin has failed)
(我希望代碼足夠清楚。如果需要我會更新它)
可以看出,我執行了function4
並解析了可能的錯誤,因為其中一個(有多個)是“可容忍的”,僅意味着它對於具有該特定data
集的function5
和function6
無效。 但是,我仍然必須拋出其他錯誤,因為它們不好。 最后,我會捕獲全局錯誤集以確定插件是否已崩潰。
我在 IDE 中得到的,JetBrains(特別是 WebStorm)是thrown exception caught locally
的thrown exception caught locally
警告。 但我無法重新想象如何重做該塊以采取不同的行動。 我沒有使用 throws 作為流量控制,而只是傳遞錯誤。
我承認主要問題是在 Javascript 中我無法catch PluginNotValidForThisKindOfDataError
,這將是最佳情況(希望有一天會添加)。 但是,使用我擁有的工具,我該如何重構呢?
非常感謝。
由於特定的 Javascript try-catch 方法,添加到與language-agnostic
和javascript
我看到三個選項:
理想情況下,插件不會在這樣的非錯誤條件下拋出錯誤。 相反,讓它返回一個值,告訴您問題中的代碼是否應該運行函數 5 和 6。
但是,如果您想保持原樣,您可以:
忽略警告(可能有一種方法可以將其禁用一行),或者
不要重投; 相反,做你在外部catch
做的同樣的事情( log(plugin has failed)
),然后是continue
。 假設這只是一個單一的函數調用或類似的函數,重復並不理想,但也不可怕。 如果該步驟有任何復雜性,請將其隔離到一個函數中(甚至可能是一個本地函數)並從兩個地方調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.