之前,我使用async.js
回调制作了一个webapp。它工作得非常好 - 当发生错误时,我会让整个堆栈完全指向发生错误的行。
现在,当我在Node的和声模式中尝试使用async/await
时,错误仅指向最后一个catch块。例如:
try {
await goDoSomething();
} catch (e) {
console.error(e);
}
现在,goDoSomething
将执行一些异步操作,例如从数据库中提取,然后执行一堆同步代码,例如处理记录等。
如果在处理记录的同步代码中发生错误,则堆栈将指向上面代码的catch块(而不是发生错误的实际行)。
这非常难以调试。这让我假设我应该在我的所有代码中多次使用这些try/catch
块(甚至是同步的东西)......?
我错过了什么?如何使用async/await
正确准确地捕获错误?
答案 0 :(得分:0)
有一些软件包可以获得异步堆栈跟踪。我推荐基于Github明星的longjohn。
答案 1 :(得分:0)
据我所知,没有办法在nodejs中做你想做的事。我花了几天尝试不同的方法,堆栈大小设置和像longjohn这样的库。当您使用外部数据源时,生成的堆栈顶部总是类似pgDriver.onPackedReceived...
。原因在于它是关于EVENTS,而不是同步/异步。异步堆栈跟踪工作正常,没有任何库。但不是事件。