为什么我的 if 条件不能阻止我的脚本崩溃?

Why does my if condition not prevent my script from crashing?

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

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 然后遇到错误。我如何更改此条件以使此错误不会使我的脚本崩溃?

异步性。

这个

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)