I am refactoring my promise chaining codes to async/await style. One of the reasons to do that is I want a single catch block to handle to all error situations (as explained here Understanding promise rejection in node.js)
My question is when I hit a sync error, should I call await Promise.reject
or throw error
to bail out the process?
I know either way will work but I prefer throw error
. I already know I got an invalid result why should I await? Using throw to terminate the control flow immediately seems to be a better option.
I am not talking about the promise chain(the whole point of my question), so I don't think the thread JavaScript Promises - reject vs. throw answered my question.
I read the article Error Handling in Node.js I don't think it gives an answer either. But it did say
A given function should deliver operational errors either synchronously (with throw) or asynchronously (with a callback or event emitter), but not both. ... In general, using throw and expecting a caller to use try/catch is pretty rare...
My async function(s) may return Promise.reject. So I am concerned about introducing 2 ways to delivering errors as that article against.
try {
let result = await aysncFunc().
if (!isResultValid(result)) { //isResultValid() is sync function
await Promise.reject('invalid result')
//or throw 'invalid result'
}
... //further processing
}
catch (error) {
...
}