𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝗣𝗿𝗼𝗺𝗶𝘀𝗲𝘀
Obietnica (Promise) reprezentuje wynik zadania asynchronicznego.
Obietnic używa się do wywołań API, zapytań do bazy danych oraz odczytywania plików.
Obietnica ma trzy stany:
- Pending (Oczekiwanie): Zadanie jest w toku.
- Fulfilled (Zrealizowana): Zadanie zakończyło się sukcesem.
- Rejected (Odrzucona): Zadanie zakończyło się błędem.
Struktura wygląda następująco:
const promise = new Promise((resolve, reject) => { // The executor runs immediately });
Wyniki obsługuje się za pomocą tych metod:
- .then(): Wykonywane, gdy obietnica zostanie zrealizowana.
- .catch(): Wykonywane, gdy obietnica zostanie odrzucona.
- .finally(): Wykonywane, gdy zadanie się zakończy, niezależnie od wyniku.
Ważne zasady, o których należy pamiętać:
- Liczy się pierwszy wynik. Jeśli wywołasz resolve() a następnie reject(), wygra resolve().
- Funkcja wykonawcza (executor) działa synchronicznie.
- Użycie async i await sprawia, że kod jest łatwiejszy do odczytania niż w przypadku użycia .then().
Obsługa wielu obietnic:
- Promise.all(): Stosuje podejście fail-fast. Jeśli jedna obietnica zawiedzie, cała grupa zostanie odrzucona.
- Promise.allSettled(): Czeka na zakończenie każdej obietnicy. Zwraca wyniki nawet wtedy, gdy niektóre zadania zakończą się błędem.
Podsumowanie:
- Promise: Obsługuje wyniki asynchroniczne.
- resolve: Oznacza sukces.
- reject: Oznacza błąd.
- async/await: Czystszy sposób pisania obietnic.
- Promise.all: Przerywa działanie przy pierwszym błędzie.
- Promise.allSettled: Kończy wszystkie zadania.
