”behärska JavaScript-intervjun” är en serie inlägg som är utformade för att förbereda kandidater för vanliga frågor som de sannolikt kommer att stöta på när de ansöker om en mid-till-Senior-nivå JavaScript-position. Det här är frågor som jag ofta använder i verkliga intervjuer.
ett löfte är ett objekt som kan ge ett enda värde någon gång i framtiden: antingen ett löst värde eller en anledning till att det inte är löst (t.ex. ett nätverksfel uppstod)., Ett löfte kan vara i ett av 3 möjliga stater: uppfyllt, avvisat eller väntande. Promise-användare kan bifoga callbacks för att hantera det uppfyllda värdet eller orsaken till avslag.
löften är angelägna, vilket innebär att ett löfte kommer att börja göra vilken uppgift du ger det så snart löftet konstruktören åberopas. Om du behöver Lat, kolla in observables eller uppgifter.
en ofullständig historia av löften
tidiga implementeringar av löften och terminer (en liknande / relaterad idé) började dyka upp på språk som MultiLisp och samtidig Prolog så tidigt som 1980-talet., Användningen av ordet ”löfte” myntades av Barbara Liskov och Liuba Shrira 1988.
första gången jag hörde om löften i JavaScript var Node helt ny och diskussionsgruppen diskuterade det bästa sättet att hantera asynkront beteende. Gemenskapen experimenterade med löften ett tag, men så småningom bosatte sig på nod-standardfel-första callbacks.
ungefär samtidigt lade Dojo löften via det uppskjutna API: et. Växande intresse och aktivitet ledde så småningom till de nybildade löften/en specifikation utformad för att göra olika löften mer driftskompatibla.,
jQuery async beteenden refactored runt löften. jQuery ’ s promise support hade anmärkningsvärda likheter med Dojos uppskjutna, och det blev snabbt den vanligaste promise — implementeringen i JavaScript på grund av jQuery enorma popularitet-för en tid. Det stödde dock inte två kanaler (uppfyllt/avvisat) kedjande beteende & undantagshantering som folk räknade med att bygga verktyg ovanpå löften.,
trots dessa svagheter, jQuery officiellt gjort JavaScript löften mainstream, och bättre fristående löfte bibliotek som Q, när, och Bluebird blev mycket populär. jquerys genomförande inkompatibiliteter motiverade några viktiga förtydliganden I promise spec, som omskrivits och omprofilerats som Promises/a+ – specifikationen.,
ES6 gav ett löfte / a + – kompatibeltPromise global, och några mycket viktiga API: er byggdes ovanpå det nya Standardlöfte stödet: i synnerhet WHATWG Fetch spec och async Functions standard (ett steg 3 utkast vid tidpunkten för detta skrivande).
de löften som beskrivs här är de som är kompatibla med Promises/a+ – specifikationen, med fokus på ECMAScript-standarden Promise – implementeringen.
hur löften fungerar
ett löfte är ett objekt som kan returneras synkront från en asynkron funktion., Det kommer att vara i ett av 3 möjliga tillstånd:
ett löfte löses om det inte är väntande (det har lösts eller avvisats). Ibland använder människor löst och fast för att betyda samma sak: inte väntande.
en gång avgjort kan ett löfte inte återställas. Anroparesolve() ellerreject() igen kommer inte att ha någon effekt. Det fasta löftets oföränderlighet är en viktig egenskap.
Native JavaScript-löften utsätter inte promise-stater. Istället förväntas du behandla löftet som en svart låda., Endast den funktion som ansvarar för att skapa löftet kommer att ha kunskap om löftets status, eller tillgång att lösa eller avvisa.
här är en funktion som returnerar ett löfte som kommer att lösa efter en viss tidsfördröjning: