为什么我的 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)
我有一个使用终端启动的脚本,它始终运行良好,但有时会随机抛出以下错误:
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)