” Master the JavaScript Interview ” is een reeks posten die bedoeld zijn om kandidaten voor te bereiden op veelvoorkomende vragen die ze waarschijnlijk zullen tegenkomen bij het solliciteren naar een JavaScript-functie op mid-tot senior niveau. Dit zijn vragen die ik vaak gebruik in echte interviews.
een belofte is een object dat in de toekomst een enkele waarde kan produceren: ofwel een opgeloste waarde, ofwel een reden dat het niet is opgelost (Er is bijvoorbeeld een netwerkfout opgetreden)., Een belofte kan in een van de 3 mogelijke Staten: vervuld, afgewezen, of hangende. Promise-gebruikers kunnen callbacks toevoegen om de vervulde waarde of de reden voor afwijzing af te handelen.
Promises staan te popelen, wat betekent dat een promise elke taak zal uitvoeren die je hem geeft zodra de promise-constructor wordt aangeroepen. Als je luie nodig hebt, check out observables of taken.
een onvolledige geschiedenis van Beloften
vroege implementaties van beloften en futures (een soortgelijk / gerelateerd idee) begon al in de jaren tachtig te verschijnen in talen zoals MultiLisp en gelijktijdige Prolog., Het gebruik van het woord “belofte” werd bedacht door Barbara Liskov en Liuba Shrira in 1988.
De eerste keer dat ik hoorde over beloften in JavaScript, was Node gloednieuw en de gemeenschap besprak de beste manier om asynchrone gedrag te behandelen. De gemeenschap experimenteerde met beloften voor een tijdje, maar uiteindelijk geregeld op het knooppunt-standaard fout-eerste callbacks.
rond dezelfde tijd voegde Dojo Beloften toe via de uitgestelde API. De groeiende belangstelling en activiteit leidden uiteindelijk tot de nieuw gevormde Promises / a-specificatie die was ontworpen om verschillende Beloften beter interoperabel te maken.,
jQuery ‘ s Async-gedrag werd omgebogen rond Beloften. jQuery ’s promise ondersteuning had opmerkelijke overeenkomsten met dojo’ s uitgesteld, en het werd al snel de meest gebruikte promise implementatie in JavaScript als gevolg van jQuery ‘ s immense populariteit — voor een tijd. Het ondersteunde echter niet het tweekanaals (voldaan/afgewezen) chaining gedrag & exception management waarop mensen rekenden om tools te bouwen bovenop Beloften.,
ondanks deze zwakke punten, jQuery officieel gemaakt Javascript Beloften mainstream, en betere stand-alone belofte bibliotheken zoals Q, When, En Bluebird werd erg populair. jQuery ‘ s implementatie onverenigbaarheden motiveerde een aantal belangrijke verduidelijkingen in de promise spec, die werd herschreven en omgedoopt tot de Promises/A+ specificatie.,
ES6 bracht een Promises/A+ compliant Promise globaal, en enkele zeer belangrijke API ‘ s werden gebouwd bovenop de nieuwe standaard Promise ondersteuning: met name de WHATWG Fetch spec en de Async Functions standard (een fase 3 ontwerp op het moment van dit schrijven).
De hier beschreven beloften zijn die welke compatibel zijn met de Promises/A+ specificatie, met een focus op de ECMAScript standaard Promise implementatie.
hoe beloftes werken
een belofte is een object dat synchroon kan worden geretourneerd vanuit een asynchrone functie., Het zal in een van de 3 mogelijke toestanden zijn:
een belofte wordt afgewikkeld als het niet in behandeling is (het is opgelost of afgewezen). Soms gebruiken mensen resolved en settled om hetzelfde te betekenen: niet in behandeling.
eenmaal afgewikkeld, kan een belofte niet worden hervestigd. Het opnieuw aanroepen van resolve() of reject() heeft geen effect. De onveranderlijkheid van een vaste belofte is een belangrijk kenmerk.
Native JavaScript promises tonen geen promise statussen. In plaats daarvan moet je de belofte behandelen als een zwarte doos., Alleen de functie die verantwoordelijk is voor het creëren van de belofte zal kennis hebben van de status van de belofte, of toegang hebben om op te lossen of af te wijzen.
Hier is een functie die een belofte retourneert die zal oplossen na een opgegeven tijdsvertraging: