gpt4 book ai didi

javascript - javascript/node.js 中的 lambda 会捕获异常吗?

转载 作者:数据小太阳 更新时间:2023-10-29 04:08:31 26 4
gpt4 key购买 nike

我有一个 node.js 服务器,我希望它能够在不崩溃的情况下处理异常,并且我有类似于下面的代码。我想知道的是,有了所有事件驱动的强大功能、回调和 lambda 等等,我的异常是否仍会被我的主要入口点捕获?

try {

http.get(..., function(results) {
// Might get an exception here
results.on('data', function () {
// Might also get an exception here
});
results.on('end', function () {
// Might also get an exception here
});
});

} catch(e) {
// Will the exceptions from the lambdas be caught here?
console.log('Nicely caught error: (' + e.name + '): ' + e.message);
}

谢谢

最佳答案

这取决于控制流。 Node.js 强调异步,异步的主要缺点之一是代码不会以您可能习惯于使用同步语言的方式流动。

在同步语言中,调用者在函数等待某些数据时被阻塞。这使得程序员的工作相当简单,因为他们可以保证当等待数据的函数返回时,将有数据供调用者使用。

在异步语言或非阻塞 I/O 中恰恰相反。在这种情况下,调用者在函数调用期间被阻塞,但是函数不必等待数据或 I/O 完成才返回。这让程序员的事情变得稍微困难​​一些,因为当函数调用返回时,无法保证是否会有可用数据。因此,非阻塞 I/O 通常意味着在数据可用于操作时调用回调函数。

try/catch block 与调用堆栈一起工作。也就是说,当抛出异常时,运行时将展开调用堆栈,直到找到围绕抛出异常的调用的 catch block 。但是,由于 http.get 是一个非阻塞调用,它会在注册一些回调后立即退出并继续处理。回调在单独的“线程”中调用,因此调用未嵌套在原始 try/catch block 中。

一张图表确实有助于解释这里的事情,但不幸的是我没有可用的图表。

关于javascript - javascript/node.js 中的 lambda 会捕获异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com