提问人:msolefonte 提问时间:10/12/2020 更新时间:10/12/2020 访问量:2601
如何修复使用 instanceof 确定内部错误类型时“本地捕获的抛出异常”
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
function5
function6
data
我在 IDE 中得到的 JetBrains(特别是 WebStorm)是一个警告。但我无法重新想象如何重做该块以采取不同的行动。我没有使用抛出作为流控制,而只是传递错误。thrown exception caught locally
我承认主要问题是在 Javascript 中我不能这样做,这将是最佳情况(希望有一天会添加它)。但是,使用我拥有的工具,我该如何重构它呢?catch PluginNotValidForThisKindOfDataError
谢谢。
由于特定的 Javascript try-catch 方法,添加到与语言无关
的 javascript 和 javascript
中
答:
我看到三个选项:
理想情况下,插件不会在这样的非错误条件下抛出错误。相反,让它返回一个值,告诉问题中的代码它是否应该运行函数 5 和 6。
但是,如果您想保持原样,您可以:
忽略警告(可能有一种方法可以在一行内禁用它),或者
不要重新投掷;相反,在 outer () 中执行相同的操作,后跟 .如果只是一个函数调用或类似的调用,那么重复并不理想,但也不可怕。如果该步骤有任何复杂性,请将其隔离到一个函数(甚至可能是一个本地函数)中,并从两个位置调用它。
catch
log(plugin has failed)
continue
评论
try
function6
评论