如何在设计应用程序时获得正确的错误堆栈?

时间:2017-04-07 17:54:17

标签: javascript node.js

之前,我使用async.js回调制作了一个webapp。它工作得非常好 - 当发生错误时,我会让整个堆栈完全指向发生错误的行。

现在,当我在Node的和声模式中尝试使用async/await时,错误仅指向最后一个catch块。例如:

try {
  await goDoSomething();
} catch (e) {
  console.error(e);
}

现在,goDoSomething将执行一些异步操作,例如从数据库中提取,然后执行一堆同步代码,例如处理记录等。

如果在处理记录的同步代码中发生错误,则堆栈将指向上面代码的catch块(而不是发生错误的实际行)。

这非常难以调试。这让我假设我应该在我的所有代码中多次使用这些try/catch块(甚至是同步的东西)......?

我错过了什么?如何使用async/await正确准确地捕获错误?

2 个答案:

答案 0 :(得分:0)

有一些软件包可以获得异步堆栈跟踪。我推荐基于Github明星的longjohn

答案 1 :(得分:0)

据我所知,没有办法在nodejs中做你想做的事。我花了几天尝试不同的方法,堆栈大小设置和像longjohn这样的库。当您使用外部数据源时,生成的堆栈顶部总是类似pgDriver.onPackedReceived...。原因在于它是关于EVENTS,而不是同步/异步。异步堆栈跟踪工作正常,没有任何库。但不是事件。