Let's say I have 12 async/await
functions, and on the 12th one deep, an error happens. Right now, I have this code to catch all errors:
process.on('unhandledRejection', function {
console.error(err);
process.exit(1);
});
The problem is, the stacktrace is not returned:
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
On other projects, when I used callbacks with the structure of:
function doSomething(err, done) {
if (err) { return done(err); }
/* do something */
return done(null, true);
}
Then I had a nice stack trace of where the error has occured and the steps that led there. Now with async/await
I've tried catching errors at all kinds of levels with no result. I've also tried longjohn
and stackup
-- and I still get only the last function that threw the error.
Help -- how do I see the complete stack?! And what's the proper way to catch nested async/await errors?
EDIT: (a complete example)
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));
unhandledRejection
error handler might not be the right way to try to catch all these. I'd suggest wrapping your async/awaits in try/catch blocks:
async function doSomething() {
try {
await doSomethingElse()
} catch(err) {
console.log(err)
}
}
This should give you a better stack trace.
It is not possible to get the stack trace after the first await statement, in an async function, as of today.
This issue appears to be resolved in Node 12 . With v12.6.0
, the snippet in the original post yields the following stack trace:
ReferenceError: sdgf is not defined
at getB (/path/to/test.js:7:3)
at async getA (/path/to/test.js:2:3)
at async start (/path/to/test.js:15:3)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.