首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用instanceof确定内部错误类型时如何修复“本地捕获的抛出异常”

在使用instanceof确定内部错误类型时如何修复“本地捕获的抛出异常”
EN

Stack Overflow用户
提问于 2020-10-12 11:20:11
回答 1查看 2K关注 0票数 1

我有一个加载一组插件的代码块。对于每个插件,在try catch块中调用一个函数列表,以确定插件是否失败,并采取相应的行动。同时,插件的多个函数之一可能返回一个特定的错误,这意味着插件没有失败,但对数据执行下一个函数无效。

让我们看看一个示例(代码是类型记录,但我将尽可能地使它成为语言不可知论者):

代码语言:javascript
复制
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并解析可能的错误,因为其中一个错误(有多个)是“可容忍的”,这只意味着它对function5function6与特定的data集无效。然而,我仍然不得不抛出其他的错误,因为它们是不好的。最后,我捕捉到全局错误集,以确定插件是否已崩溃。

在我的IDE中,JetBrains (特别是WebStorm)得到的是一个thrown exception caught locally警告。但我无法重新想象如何重做这个块,以改变它的行为。我不是使用抛出作为流控制,而是传递错误。

我承认,主要的问题是,在Javascript中,我不能做catch PluginNotValidForThisKindOfDataError,这将是最优的情况(希望有一天它会增加)。但是,用我所拥有的工具,我如何重构它呢?

非常感谢。

添加到language-agnosticjavascript中,因为使用了特定的Javascript try-catch方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-12 11:26:24

我认为有三种选择:

  1. 的理想情况下,这种插件不会在非错误条件下抛出错误。相反,让它返回一个值,它告诉您的问题中的代码是否应该运行函数5和6。

不过,如果你想保持原样,你也可以:

  1. 忽略警告(可能有一种方法可以在一行中禁用它),或者

  1. 不要重新抛出;相反,在外层catch (log(plugin has failed))中做同样的事情,然后是continue。如果这只是一个函数调用或类似的,复制并不理想,但也不可怕。如果该步骤有任何复杂性,请将其隔离为一个函数(甚至可能是一个本地函数),并将其从两个地方调用。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64316858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档