Javascript 为什么在某些情况下,这个try-catch不能捕获错误

Javascript 为什么在某些情况下,这个try-catch不能捕获错误,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,我试图发出一个exec命令来测试某些代码,所以我添加了try-catch,这样我就不必在出错时不断地重新启动它。它确实有效,但只是有时候,我不知道为什么 if(msg.content.startsWith('m.exec')&&msg.author.id==='--'){ 试一试{ var代码=msg.content.slice(6,msg.content.length); eval(“var fn=()=>{code+“}”); fn(); }捕捉(错误){ msg.channel.send(

我试图发出一个exec命令来测试某些代码,所以我添加了try-catch,这样我就不必在出错时不断地重新启动它。它确实有效,但只是有时候,我不知道为什么

if(msg.content.startsWith('m.exec')&&msg.author.id==='--'){
试一试{
var代码=msg.content.slice(6,msg.content.length);
eval(“var fn=()=>{code+“}”);
fn();
}捕捉(错误){
msg.channel.send('代码错误:'+错误消息);
}
}

例如,如果我在参数列表之后执行
m.exec msg.channel.send('something')。然后(m=>m.channel.send('sent…')

it messages
missing),这是预期的,但如果我执行
m.exec msg.channel.send(此)

它将错误放入控制台并使bot崩溃。

像这样的
try/catch
不会捕获其中的异步错误(除非它们与
wait
关联),因此如果错误是异步抛出的,则可能无法捕获。要确定这一点,您必须进入
msg.channel.send(this)
或检查代码,查看错误是如何抛出的。因此,如果我理解正确,它将不会捕获承诺错误?是和否。如果您执行
等待某个承诺
且该承诺被拒绝,则
try/catch
将捕获承诺被拒绝。但是,它不会捕获异步抛出的任何其他内容。那么,您有解决方案吗?将
.catch()
添加到所有承诺中会解决我的问题吗?请参阅我之前关于仅在单独的VM中运行不受信任的代码的评论。这是我所知道的对付任意流氓代码的唯一方法。