Rozdíl mezi JavaScriptem Promise.all a Promise.allSettled

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