Rozdíl mezi JavaScriptem Promise.all a Promise.allSettled:
Musíme použít více Promises na mnoha místech v JavaScriptu. Promise.all a Promise.allSettled jsou obě důležité metody pro zpracování více slibů v JavaScriptu. Obě metody přijímají řadu slibů. Ale mezi těmito dvěma je rozdíl.
V tomto příspěvku vám ukážu, jak používat Promise.all a Promise.allSettled v JavaScriptu a rozdíly mezi těmito dvěma metodami.
Promise.all:
Promise.all metoda bere jako svůj parametr iterovatelnost slibů. Vrací jediný Slib .
Vrácený příslib se vyhodnotí jako pole výsledků příslibů odeslaných této metodě. Výsledný příslib se vyřeší pouze v případě, že budou vyřešeny všechny přísliby. Pokud je iterovatelný prázdný , vyřeší se to. Odmítne, pokud některý ze vstupních příslibů odmítne.
Vyvolá to stejnou chybu odmítnutí.
Pojďme se podívat na níže uvedený program:
let p1 = Promise.resolve(1);
let p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 200, 'resolved-2');
});
let p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 300, 'resolved-3');
});
Promise.all([p1, p2, p3]).then((values) => {
console.log(values);
});
Zde jsme vytvořili tři sliby p1 , p2 a p3 . Promise.all přijímá všechny tyto sliby a tiskneme výsledek výsledku řešení slibu.
Vytiskne:
[ 1, 'resolved-2', 'resolved-3' ]
Vezměme to s prázdným polem:
Promise.all([]).then((values) => {
console.log(values);
});
Vytiskne:
[]
Pokud jeden ze slibů odmítne, odmítne poslední Promise.all metoda.
let p1 = Promise.resolve(1);
let p2 = Promise.reject("Rejecting p2 !!");
let p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 300, 'resolved-3');
});
Promise.all([p1, p2, p3]).then((values) => {
console.log(values);
}).catch(error => console.log(error));
Vytiskne:
Rejecting p2 !!
Protože, p2 je odmítnut, Promise.all byl zamítnut.
Promise.allSettled:
Promise.allSettled metoda je trochu jiná než Promise.all . Parametr Promise.allSettled je podobný Promise.all , tj. musíme předat iterovatelné nebo pole držící sliby. Tato metoda vrací slib, který se vyřeší poté, co všechny sliby, které jsme této metodě předali, buď splnili nebo odmítnuto . Nejlepší na tom je, že vrátí pole objektů s výsledkem každého slibu.
Pokud chcete znát výsledek každého slibu, můžete použít tuto metodu. Pokud však chcete odmítnout slib výsledku, pokud byl některý ze slibů odmítnut, můžete použít Promise.all .
Zkusme to na příkladu:
let p1 = Promise.resolve(1);
let p2 = Promise.reject("Rejecting p2 !!");
let p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 300, 'resolved-3');
});
Promise.allSettled([p1, p2, p3]).then((values) => {
console.log(values);
}).catch(error => console.log(error));
Vytiskne:
[
{ status: 'fulfilled', value: 1 },
{ status: 'rejected', reason: 'Rejecting p2 !!' },
{ status: 'fulfilled', value: 'resolved-3' }
]
Jak můžete vidět zde, vrátilo pole objektů obsahujících výsledek každého slibu, který jsme v poli předali.
Mohlo by se vám také líbit:
- Vysvětlení metody vyhledávání řetězce JavaScript s příkladem
- Jak převzít jedno pole jako vstup od uživatele v JavaScriptu
- Jak vrátit objekty z funkcí JavaScript
- 2 způsoby, jak zkontrolovat, zda proměnná existuje nebo je definována v JavaScriptu či nikoli
- Jak převést řetězec oddělený čárkami na pole v JavaScriptu
- Jak přidat prvek do pole na konkrétní pozici v JavaScriptu
- Implementace binárního vyhledávání v JavaScriptu