如何使用async / await获取完整的Node.js堆栈跟踪?

假设我有12个async/await函数,并且在12个深处发生错误。 现在,我有这个代码来捕捉所有的错误:

 process.on('unhandledRejection', function { console.error(err); process.exit(1); }); 

问题是,堆栈跟踪没有被返回:

 ReferenceError: sdfg is not defined - get.js:29 Fruit.module.exports [as get] /project/models/fruit/get.js:29:2 - next_tick.js:129 process._tickDomainCallback internal/process/next_tick.js:129:7 

在其他项目上,当我使用callback的结构为:

 function doSomething(err, done) { if (err) { return done(err); } /* do something */ return done(null, true); } 

然后我有一个很好的堆栈跟踪错误发生的地方,并导致那里的步骤。 现在与async/await我已经尝试在各种级别捕捉错误,没有结果。 我也尝试了longjohnlongjohn – 我仍然只得到抛出错误的最后一个函数。

帮助 – 我如何看到完整的堆栈? 什么是正确的方法来捕捉嵌套的asynchronous/等待错误?

编辑:(完整的例子)

 const getA = async () => { await getB(); } const getB = async () => { await getC(); sdgf(); } const getC = async () => {} const start = async () => { await getA(); } start().then().catch(e => console.error(e)); 

unhandledRejectionerror handling程序可能不是正确的方法来尝试捕获所有这些。 我build议包装你的asynchronous/等待在try / catch块:

 async function doSomething() { try { await doSomethingElse() } catch(err) { console.log(err) } } 

这应该给你一个更好的堆栈跟踪。