[{"data":1,"prerenderedAt":326},["ShallowReactive",2],{"term-p\u002Fpromise":3,"related-p\u002Fpromise":311},{"id":4,"title":5,"acronym":6,"body":7,"category":294,"description":295,"difficulty":296,"extension":297,"letter":16,"meta":298,"navigation":110,"path":299,"related":300,"seo":305,"sitemap":306,"stem":309,"subcategory":6,"__hash__":310},"terms\u002Fterms\u002Fp\u002Fpromise.md","Promise",null,{"type":8,"value":9,"toc":288},"minimark",[10,15,19,23,26,30,277,281,284],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"A Promise is JavaScript's way of saying 'I'll give you a value eventually — it's not ready yet, but I promise.' Instead of blocking everything while waiting for data, a Promise lets you say 'when this is done, do this next thing.' It has three states: pending, resolved (fulfilled), or rejected.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"A Promise is a JavaScript object representing the eventual completion or failure of an asynchronous operation. It provides .then() for success handlers, .catch() for error handlers, and .finally() for cleanup. Promises form the foundation of async\u002Fawait syntax and are used throughout browser APIs (Fetch, IndexedDB, etc.).",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Creating a Promise\nconst delay = (ms) => new Promise(resolve => setTimeout(resolve, ms))\n\n\u002F\u002F Chaining\nfetch('\u002Fapi\u002Fdata')\n  .then(res => res.json())\n  .then(data => console.log(data))\n  .catch(err => console.error(err))\n\n\u002F\u002F Promise.all — run in parallel\nconst [users, posts] = await Promise.all([fetchUsers(), fetchPosts()])\n","javascript","",[38,39,40,49,105,112,118,138,166,191,216,221,227],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Creating a Promise\n",[41,50,52,56,60,64,67,71,74,77,80,84,87,90,92,96,99,102],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","const",[41,57,59],{"class":58},"sTEyZ"," delay ",[41,61,63],{"class":62},"sMK4o","=",[41,65,66],{"class":62}," (",[41,68,70],{"class":69},"sHdIc","ms",[41,72,73],{"class":62},")",[41,75,76],{"class":54}," =>",[41,78,79],{"class":62}," new",[41,81,83],{"class":82},"sBMFI"," Promise",[41,85,86],{"class":58},"(",[41,88,89],{"class":69},"resolve",[41,91,76],{"class":54},[41,93,95],{"class":94},"s2Zo4"," setTimeout",[41,97,98],{"class":58},"(resolve",[41,100,101],{"class":62},",",[41,103,104],{"class":58}," ms))\n",[41,106,108],{"class":43,"line":107},3,[41,109,111],{"emptyLinePlaceholder":110},true,"\n",[41,113,115],{"class":43,"line":114},4,[41,116,117],{"class":47},"\u002F\u002F Chaining\n",[41,119,121,124,126,129,133,135],{"class":43,"line":120},5,[41,122,123],{"class":94},"fetch",[41,125,86],{"class":58},[41,127,128],{"class":62},"'",[41,130,132],{"class":131},"sfazB","\u002Fapi\u002Fdata",[41,134,128],{"class":62},[41,136,137],{"class":58},")\n",[41,139,141,144,147,149,152,154,157,160,163],{"class":43,"line":140},6,[41,142,143],{"class":62},"  .",[41,145,146],{"class":94},"then",[41,148,86],{"class":58},[41,150,151],{"class":69},"res",[41,153,76],{"class":54},[41,155,156],{"class":58}," res",[41,158,159],{"class":62},".",[41,161,162],{"class":94},"json",[41,164,165],{"class":58},"())\n",[41,167,169,171,173,175,178,180,183,185,188],{"class":43,"line":168},7,[41,170,143],{"class":62},[41,172,146],{"class":94},[41,174,86],{"class":58},[41,176,177],{"class":69},"data",[41,179,76],{"class":54},[41,181,182],{"class":58}," console",[41,184,159],{"class":62},[41,186,187],{"class":94},"log",[41,189,190],{"class":58},"(data))\n",[41,192,194,196,199,201,204,206,208,210,213],{"class":43,"line":193},8,[41,195,143],{"class":62},[41,197,198],{"class":94},"catch",[41,200,86],{"class":58},[41,202,203],{"class":69},"err",[41,205,76],{"class":54},[41,207,182],{"class":58},[41,209,159],{"class":62},[41,211,212],{"class":94},"error",[41,214,215],{"class":58},"(err))\n",[41,217,219],{"class":43,"line":218},9,[41,220,111],{"emptyLinePlaceholder":110},[41,222,224],{"class":43,"line":223},10,[41,225,226],{"class":47},"\u002F\u002F Promise.all — run in parallel\n",[41,228,230,232,235,238,240,243,246,249,253,255,257,260,263,266,269,271,274],{"class":43,"line":229},11,[41,231,55],{"class":54},[41,233,234],{"class":62}," [",[41,236,237],{"class":58},"users",[41,239,101],{"class":62},[41,241,242],{"class":58}," posts",[41,244,245],{"class":62},"]",[41,247,248],{"class":62}," =",[41,250,252],{"class":251},"s7zQu"," await",[41,254,83],{"class":82},[41,256,159],{"class":62},[41,258,259],{"class":94},"all",[41,261,262],{"class":58},"([",[41,264,265],{"class":94},"fetchUsers",[41,267,268],{"class":58},"()",[41,270,101],{"class":62},[41,272,273],{"class":94}," fetchPosts",[41,275,276],{"class":58},"()])\n",[11,278,280],{"id":279},"when-youll-hear-this","When You'll Hear This",[16,282,283],{},"Promise.all lets you run multiple async operations in parallel.,A rejected Promise without a .catch() causes an unhandled rejection error.,Async\u002Fawait is just syntactic sugar over Promises.",[285,286,287],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":51,"depth":51,"links":289},[290,291,292,293],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":279,"depth":51,"text":280},"frontend","A Promise is JavaScript's way of saying 'I'll give you a value eventually — it's not ready yet, but I promise.","intermediate","md",{},"\u002Fterms\u002Fp\u002Fpromise",[301,302,303,304],"Async\u002FAwait","Fetch","Event Loop","Callback",{"title":5,"description":295},{"changefreq":307,"priority":308},"weekly",0.7,"terms\u002Fp\u002Fpromise","7nMjL2CkhNescxKRctt95f8i_5-YZ5zIyuvu8fXaMk4",[312,315,319,323],{"title":301,"path":313,"acronym":6,"category":294,"difficulty":296,"description":314},"\u002Fterms\u002Fa\u002Fasync-await","Async\u002Fawait is syntactic sugar that makes Promises look like normal, readable code. Instead of chaining .then().then().",{"title":304,"path":316,"acronym":6,"category":294,"difficulty":317,"description":318},"\u002Fterms\u002Fc\u002Fcallback","beginner","A callback is just a function you pass to another function, saying 'when you're done, call this.",{"title":303,"path":320,"acronym":6,"category":294,"difficulty":321,"description":322},"\u002Fterms\u002Fe\u002Fevent-loop","advanced","JavaScript can only do one thing at a time (single-threaded), but the Event Loop is the trick that makes it seem like it can multitask.",{"title":302,"path":324,"acronym":6,"category":294,"difficulty":317,"description":325},"\u002Fterms\u002Ff\u002Ffetch","Fetch is the modern, built-in JavaScript way to make HTTP requests to APIs. You tell it a URL, it goes and gets the data, and you handle the response.",1776518303588]