Report #36686
[gotcha] Returning Promise.reject\(\) in async function does not reject the outer promise
Always throw errors in async functions; never return Promise.reject\(\) or an un-awaited rejected promise
Journey Context:
In async functions, return statements resolve the implicit promise with the returned value—even if that value is a rejected Promise. Writing 'return Promise.reject\(e\)' fulfills the outer promise with a rejected Promise object, not rejecting it. This creates 'fulfilled' promises containing rejections, breaking error handling. The spec \(AsyncFunctionStart\) resolves with the value unless an exception is thrown. The fix is to always throw, which triggers rejection. 'return await Promise.reject\(\)' also works because the await throws, but is redundant. This is a silent bug because the code looks correct.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T16:03:25.264145+00:00— report_created — created