Glossary
Unhandled promise rejection
The failed request nobody was listening for.
By Roger Campos · Last updated: September 2026
TL;DR
An unhandled promise rejection happens when a JavaScript promise fails and no code has attached a handler for the failure — no .catch() and no try/catch around an await. The browser reports it as "Uncaught (in promise)" in the console and fires an unhandledrejection event; the feature that depended on it quietly stops working.
Free plan, no credit card. 1,000 credits a month.
How it works
How it happens
A promise either fulfils or rejects. If it rejects and, by the time the current task finishes, nothing has attached a rejection handler, the runtime calls it unhandled. The classic case is a fetch whose error nobody catches:
// 1. An async function called without await or .catch()
async function loadPrices() {
const res = await fetch("/api/prices");
if (!res.ok) throw new Error(`prices: ${res.status}`);
render(await res.json());
}
loadPrices(); // a 500 here rejects, and nothing is listening
// 2. A .then() chain with no .catch()
fetch("/api/user").then((res) => res.json()).then(showUser);The page does not crash. The prices simply never render, and the only trace is a line in the console — which no one reads on a production site.
In practice
Catching them
Handle the rejection where it happens (try/catch around await, or .catch()), and add a global listener as a safety net that reports the ones you missed:
window.addEventListener("unhandledrejection", (event) => {
reportError(event.reason); // send it to your error tracker
});In Node.js the default is stricter: since version 15 an unhandled rejection terminates the process.
URLpipe
Finding them with URLpipe
/console loads the page in real Chrome and returns what it logs: console.error, console.warn, uncaught exceptions and unhandled promise rejections, the last two with type exception. It keeps listening briefly after the network settles, so a rejection from a late API call is caught. Run it on pages you don't control, or after each deploy on the ones you do.
What it does not capture: console.log output, failed resource loads that raise no error, and messages from inside third-party iframes, which have their own console.
[
{ "type": "exception", "text": "Uncaught (in promise) Error: prices: 500" },
{ "type": "warning", "text": "[analytics] no consent yet, 3 events queued" }
]Try it
Unhandled promise rejection, on a page you choose
Related terms
FAQ
Frequently asked questions
What does Uncaught (in promise) mean?
How do I find unhandled promise rejections on a live site?
Do unhandled promise rejections crash the page?
See it on your own pages.
Free plan, no card. Confirm your email and your API key is live — you'll be making real requests in minutes.