微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用instanceof确定内部错误类型时如何解决“本地捕获的异常”

如何解决使用instanceof确定内部错误类型时如何解决“本地捕获的异常”

我有一段代码可以加载一组插件。对于每个插件,在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和{ {1}}和特定的function6集。但是,我仍然必须抛出其他错误,因为它们不好。最后,我捕获了全局错误集,以确定插件是否崩溃。

我在IDE中得到的JetBrains(特别是WebStorm)是data警告。但是我无法重新想象如何重做该块以采取不同的行动。我不是使用throws作为流控制,而是传递错误

我承认主要的问题是在Javascript中我无法做到thrown exception caught locally,这将是最佳的情况(希望有一天会增加它)。但是,有了我拥有的工具,我该如何重构呢?

非常感谢您。

由于特定的Javascript尝试捕获方法添加catch PluginNotValidForThisKindOfDataErrorlanguage-agnostic

解决方法

我看到三个选项:

  1. 理想情况下,对于这样的非错误条件,该插件不会抛出错误。取而代之的是,让它 return 一个值告诉您的代码是否应运行函数5和6。

    但是,如果要保持原样,则可以:

  2. 忽略警告(可能有一种方法可以将其禁用一行),或者

  3. 不要重新抛出;相反,请在外部<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="usercmmnt-tpl-m7 ucanswr-m7"> <div class="ucctn-m7"> <div class="ucmain-m7"> <div class="lctn-m7"> <div class="ucinftx-m7"> <div class="upndata-m7"> <div class="usrpic-tpl-s1"> <figure class="c1-s1" data-img="رم"></figure> </div> <div class="uname-m7"> <span class="untx-m7">علی حسینی</span> </div> <div class="udata-m7"> <span class="udtx-m7">17 شهریور 98</span> </div> </div> </div> </div> </div> </div> </div>catch)后跟log(plugin has failed)进行相同的操作。如果只是单个函数调用或类似的调用,则复制不是理想的,但也不是可怕的。如果该步骤有任何复杂性,请将其隔离为一个函数(甚至可能是一个本地函数),然后从两个地方调用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。