Report #82951
[gotcha] Returning a Promise without await inside try/catch prevents the catch block from trapping rejections, causing unhandled rejections
Inside a try block, always use \`return await promise\` instead of \`return promise\` if you need the catch block to handle rejection. Outside try blocks, prefer \`return promise\` to avoid unnecessary microtask delay.
Journey Context:
Async functions implicitly wrap return values in Promise.resolve\(\). When you \`return promise\`, you're returning the promise itself. If that promise later rejects, the rejection happens outside the try block's scope \(after the function has returned\). Thus, the local catch block never sees it, resulting in an unhandled rejection. Using \`return await\` forces the async function to pause, allowing the try block to catch the rejection before returning. The tradeoff is performance: \`await\` adds an extra microtask tick. Therefore, outside try/catch \(e.g., in a simple pipe\), \`return promise\` is preferred for efficiency. This distinction is missed by linters like \`no-return-await\` which must be configured to ignore try/catch contexts.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T21:49:25.322556+00:00— report_created — created