„Master the JavaScript Interview” jest serią postów mających na celu przygotowanie kandydatów do typowych pytań, które mogą napotkać podczas ubiegania się o średniej i wyższej pozycji JavaScript. Są to pytania, których często używam w prawdziwych wywiadach.
obietnica jest obiektem, który może w przyszłości wygenerować pojedynczą wartość: albo wartość rozwiązana, albo powód, dla którego nie została rozwiązana (np. wystąpił błąd sieciowy)., Obietnica może być w jednym z 3 możliwych stanów: spełniona, odrzucona lub oczekująca. Użytkownicy Promise mogą dołączać wywołania zwrotne, aby obsłużyć spełnioną wartość lub powód odrzucenia.
obietnice są chętne, co oznacza, że obietnica zacznie wykonywać każde zadanie, które jej podasz, gdy tylko konstruktor obietnicy zostanie wywołany. Jeśli potrzebujesz leniwego, sprawdź obserwatory lub zadania.
niekompletna Historia obietnic
wczesne implementacje obietnic i przyszłości (podobna / pokrewna idea) zaczęły pojawiać się w językach takich jak MultiLisp i współbieżny Prolog już w latach 80., Słowo „obietnica” zostało wymyślone przez Barbarę Liskow i Liubę Shrirę w 1988 roku.
gdy pierwszy raz usłyszałem o obietnicach w JavaScript, Node był zupełnie nowy, a społeczność dyskutowała o najlepszym sposobie obsługi asynchronicznych zachowań. Społeczność przez jakiś czas eksperymentowała z obietnicami, ale ostatecznie ustaliła błąd standardowy węzła-pierwsze wywołania zwrotne.
mniej więcej w tym samym czasie Dojo dodało obietnice poprzez odroczone API. Rosnące zainteresowanie i aktywność w końcu doprowadziły do nowo utworzonych obietnic / specyfikacji zaprojektowanej w celu uczynienia różnych obietnic bardziej interoperacyjnymi.,
asynchroniczne zachowania jQuery były refakturowane wokół obietnic. obsługa jQuery promise miała niezwykłe podobieństwa do Deferred Dojo i szybko stała się najczęściej używaną implementacją promise w JavaScript ze względu na ogromną popularność jQuery — przez pewien czas. Nie obsługiwał on jednak dwukanałowego (spełnionego/odrzuconego) zachowania łańcucha & zarządzania wyjątkami, na które ludzie liczyli, aby budować narzędzia na obietnicach.,
pomimo tych słabości, jQuery oficjalnie złożył obietnice JavaScript mainstream, a lepsze samodzielne biblioteki obietnic, takie jak Q, When I Bluebird, stały się bardzo popularne. niezgodność implementacji jQuery motywowała kilka ważnych wyjaśnień w specyfikacji promise, która została przepisana i przemianowana na specyfikację Promises/a+.,
ES6 przyniósł obietnice/a+ zgodnePromise global, a niektóre bardzo ważne API zostały zbudowane na szczycie nowego standardu wsparcia obietnicy: zwłaszcza WHATWG Fetch spec i async Functions standard (szkic etapu 3 w momencie pisania tego tekstu).
obietnice opisane tutaj są te, które są zgodne ze specyfikacją Promises/A+, z naciskiem na standard ECMAScriptPromise.
jak działają obietnice
obietnica jest obiektem, który może być zwracany synchronicznie z funkcji asynchronicznej., Będzie w jednym z 3 możliwych stanów:
obietnica jest rozliczana, jeśli nie jest oczekująca (została rozwiązana lub odrzucona). Czasami ludzie używają rozwiązania i ugody, aby oznaczać to samo: nie oczekujące.
po rozliczeniu obietnicy nie można Wywołanie resolve() lubreject() ponownie nie będzie miało wpływu. Niezmienność ustalonej obietnicy jest ważną cechą.
rodzime obietnice JavaScript nie ujawniają Stanów obietnic. Zamiast tego masz traktować obietnicę jak czarną skrzynkę., Tylko funkcja odpowiedzialna za stworzenie obietnicy będzie miała wiedzę o statusie obietnicy lub dostęp do rozwiązania lub odrzucenia.
oto funkcja, która zwraca obietnicę, która zostanie rozwiązana po określonym opóźnieniu czasowym: