【问题标题】:Why does my if condition not prevent my script from crashing?为什么我的 if 条件不能阻止我的脚本崩溃?
【发布时间】:2020-04-27 18:42:41
【问题描述】:

我有一个使用终端启动的脚本,它总是运行良好,但有时会随机抛出以下错误:

TypeError: Cannot read property 'Name' of undefined

此脚本在由于此错误而崩溃之前,会经历数千次相同的代码行。这是有问题的行:

setTimeout(function() {deleteAlert(data[This].Name, intent); }, 2000);

如何防止我的程序崩溃?我试过这样做:

  if (data[This] && data[This].Name) {
    setTimeout(function() {deleteAlert(data[This].Name, intent); }, 2000);
  } else {
    console.log(colors.red('ATTENTION: ') + "alert not deleted");
  }

但它有时仍会在同一行引发错误。我的意思是它成功通过data[This] && data[This].Name 然后遇到错误。如何更改此条件以使此错误不会使我的脚本崩溃?

【问题讨论】:

    标签: javascript node.js exception crash typeerror


    【解决方案1】:

    异步性。

    这个

    deleteAlert(data[This].Name, intent)
    

    如果未定义 data[This].Name,可能确实会引发错误,但您会在两秒前进行安全检查,在您进行安全检查和调用 data[This].Name 之间,data 可能会发生变化.

    您应该在致电data[This].Name 之前进行安全检查,例如

    setTimeout(() => {
      if (data[This] && data[This].Name) {
        deleteAlert(data[This].Name, intent)
      } else {
        console.log(colors.red('ATTENTION: ') + "alert not deleted")
      }
    }, 2000)
    

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 1970-01-01
      • 2021-02-22
      • 2023-03-31
      • 1970-01-01
      • 2011-10-16
      • 2016-12-21
      • 2019-01-13
      • 1970-01-01
      相关资源
      最近更新 更多