[ Leksykon ] [ JavaScript ] [ Metody ] [ Promise() ]
Promise.all()
[_] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Promise.all(iterable)
Przykłady:
function mojaPromiseA() {
return new Promise((resolve, reject) => {
setTimeout(() => {resolve("Zadanie A"); }, 500)
});
}
const mojaPromiseB = new Promise((resolve, reject) => {
setTimeout(() => {resolve("Zadanie B"); }, 400)
});
function mojaPromiseC() {
return new Promise((resolve, reject) => {
setTimeout(() => {resolve("Zadanie C"); }, 300)
});
}
function mojaPromiseD() {
return new Promise((resolve, reject) => {
reject(new Error("reject"));
});
}
Promise.all([
mojaPromiseA(),
mojaPromiseB,
mojaPromiseC(),
mojaPromiseD()
])
.then(resolve => {
console.log(resolve);
})
.catch((error) => {
console.error(error.message);
});
Przykłady z zastosowaniem metody statycznej Promise.all(). Metoda zwraca obietnicę spełnioną, gdy wszystkie obietnice danych wejściowych iterowalne (agregującej tablicy) obietnic są spełnione. Jeżeli którakolwiek z obietnic wejściowych jest reject to zwróci obietnicy spełnionej. Spełnia się, gdy wszystkie obietnice się spełniają; odrzuca, gdy którakolwiek z obietnic zostaje odrzucona.
const promiseA = 3;
const promiseB = Promise.resolve(5);
const promiseC = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "Witaj!");
});
const promiseD = "TAK!";
const promiseE = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Dom!");
}, 200);
});
// Jeśli iterable zawiera wartości inne niż obietnica, zostaną one zignorowane,
// ale nadal będą wliczane do zwróconej wartości tablicy obietnicy
Promise.all([promiseA, promiseB, promiseC, promiseD, promiseE]).then((values) => {
console.log(values);
}); // zwruci wynik tablicę: Array [3, 5, "Witaj!", "TAK!"]
Metoda jest spełniona gdy iterable jest pusty lub gdy wszystkie obietnice w danym iterable spełnią się. Wartość spełnienia to tablica wartości spełnienia, w kolejności przekazanych obietnic, niezależnie od kolejności realizacji. Jeśli iterable przekazana nie jest pusta, ale nie zawiera żadnych oczekujących obietnic, zwrócona obietnica jest nadal realizowana asynchronicznie (zamiast synchronicznie). Metoda odrzucona asynchronicznie, gdy którakolwiek z obietnic w podanych iterable odrzuca. Przyczyną odrzucenia jest przyczyna odrzucenia pierwszej obietnicy, która została odrzucona.
setTimeout(() => {
console.log(Promise.all(["a", "b", "c"]));
console.log(Promise.all([1, 2, 3, Promise.resolve(4)]));
console.log(Promise.all([5, 6, 7, Promise.reject(8)]));
});
// Promise { <state>: "fulfilled", <value>: Array }
// Promise { <state>: "fulfilled", <value>: Array }
// Promise { <state>: "rejected", <reason>: 8 }
// może: Promise { <state>: "pending" }
function startA() {
console.log("zadanieA");
return Promise.all([zadanieA(), zadanieB()]).then(
(messages) => {
console.log(messages[0]); // resolve("zadanieA");
console.log(messages[1]); // resolve("zadanieB");
}
);
}
Opis:
Promise.all() statyczna przyjmuje jako dane wejściowe iterowalne obietnice i zwraca pojedynczy element Promise(). Ta zwrócona obietnica zostaje spełniona, gdy spełnią się wszystkie obietnice danych wejściowych (w tym także wtedy, gdy zostanie przekazana pusta iterowalna obietnica) z tablicą wartości spełnienia. Odrzuca, gdy jakakolwiek obietnica danych wejściowych zostaje odrzucona, z tym pierwszym powodem odrzucenia. Parametry iterable - Iterowalna jak Array obietnica. Wartość zwracana Promise() spełnione, jeśli iterable przekazane jest puste. Asynchronicznie spełnione, gdy wszystkie obietnice w danym iterable spełnią się. Wartość spełnienia to tablica wartości spełnienia, w kolejności przekazanych obietnic, niezależnie od kolejności realizacji. Jeśli iterable przekazana informacja nie jest pusta, ale nie zawiera żadnych oczekujących obietnic, zwrócona obietnica jest nadal spełniona asynchronicznie zamiast synchronicznie. Odrzucone asynchronicznie, gdy którakolwiek z obietnic w danym iterable zostanie odrzucona. Powód odrzucenia to powód odrzucenia pierwszej obietnicy, która została odrzucona. Metoda ta Promise.all() należy do metod obiecującej współbieżności. Może być przydatny do agregowania wyników wielu obietnic. Zwykle używa się jej, gdy istnieje wiele powiązanych zadań asynchronicznych, od których zależy pomyślne działanie całego kodu, a wszystkie z nich chcemy wykonać przed kontynuowaniem wykonywania kodu. Promise.all() odrzuci natychmiast po odrzuceniu którejkolwiek z obietnic wejściowych. Dla porównania, obietnica zwrócona przez Promise.allSettled() będzie czekać na zakończenie wszystkich obietnic wejściowych, niezależnie od tego, czy jedna z nich zostanie odrzucona, czy nie. Użyj Promise.allSettled(), jeśli potrzebujesz końcowego wyniku każdej obietnicy na wejściu, który można iterować.
Linki: