在javascript/node.js中是否会在lambda中捕获异常?

Chr*_*ris 8 javascript exception node.js

我有一个node.js服务器,我希望能够处理异常而不会崩溃,我有类似下面的代码.我想知道的是,所有事件驱动的精彩和回调以及lambdas以及所有这些,我的例外仍然会被我的主要切入点捕获?

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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Bry*_*yle 8

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

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

它与异步语言或非阻塞I/O完全相反.在这种情况下,调用程序在函数调用期间被阻塞,但函数不必在返回之前等待数据或I/O完成.这使得程序员的工作稍微困难一些,因为当函数调用返回时,无法保证是否有可用的数据.因此,非阻塞I/O通常意味着在数据可用时调用的回调函数.

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

一张图表真的有助于解释这里的事情,但不幸的是我没有一个可用的.

  • 你会遇到什么样的例外?理想情况下,node.js会有一个错误回调,允许您执行所需的任何清理. (3认同)