logo

Metoda JavaScript Promise all().

The Metoda Promise.all(). je ve skutečnosti metoda objektu Promise (což je také objekt pod JavaScriptem používaným ke zpracování všech asynchronních operací), který bere jako vstup pole slibů (opakovatelné). Vrátí singl Slib který se vyřeší, když všechny sliby prošly jako iterovatelné, které byly vyřešeny, nebo když iterovatelný neobsahuje žádné sliby. Jednoduše řečeno, pokud některý z předávaných slibů odmítnete, Promise.all() metoda asynchronně odmítá hodnotu příslibu, který již byl odmítnut, bez ohledu na to, zda byly ostatní přísliby vyřešeny.

Syntax:



Promise.all( iterable )>

Parametry: Tato metoda přijímá jeden parametr iterovatelné který trvá řadu slibuje nebo normální pole, které obsahuje nějaké objekty.

Návratové hodnoty: Pro vrácení jednoho slibu se řídí některými pravidly:

  • Pokud je předaný argument prázdný, vrátí příslib, který již je vyřešeno .
  • Pokud předaná iterace neobsahuje žádné přísliby, vrátí příslib, který je vyřešen asynchronně .
  • Ve všech ostatních případech vrací čekající příslib.

Splnění a odmítnutí metody Promise.all():



Splnění: Vrácený slib je splněn,

  • Pokud je předaná iterovatelná položka prázdná, pak tato metoda vrátí synchronně příslib, který je již vyřešen.
  • Pokud jsou splněny všechny předané sliby, vrácené sliby jsou splněny asynchronně.
  • Zde úspěšné provedení této konkrétní metody zcela závisí na všech slibech, že budou úspěšně provedeny.

Odmítnutí: Pokud je některý ze složených slibů odmítnut, pak tato metoda odmítne hodnotu tohoto slibu bez ohledu na to, zda byly ostatní sliby vyřešeny nebo ne. Jinými slovy, pokud se nepodaří splnit jakýkoli slib, metoda Promise.all() vrátí chybu a nebude brát v úvahu, zda jsou ostatní sliby úspěšně splněny nebo ne.

Níže uvedené příklady ilustrují metodu JavaScript Promise.all():



Příklad 1: Metoda Promise.all() čeká splnění

linuxové příkazy, které

javascript




p1 = Promise.resolve(50);> p2 = 200> p3 =>new> Promise(>function> (resolve, reject) {> >setTimeout(resolve, 100,>'geek'>);> });> Promise.all([p1, p2, p3]).then(>function> (values) {> >console.log(values);> });>

>

>

Výstup

[ 50, 200, 'geek' ]>

Příklad 2: Zde se metoda Promise.all() vyřeší po 2000 ms a výstup se zobrazí jako pole.

javascript




// Simple promise that resolves> // after a given time> const tOut = (t) =>{> >return> new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(`Completed>in> ${t}`)> >}, t)> >})> }> // Resolving a normal promise> tOut(1000).then(result =>console.log(výsledek +>))> // Completed in 1000> // Promise.all> Promise.all([tOut(1000), tOut(2000)])> >.then(result =>console.log(výsledek))>

>

>

Výstup:

Completed in 1000 Completed in 1000, Completed in 2000>

Tady, Promise.all() metoda je pořadí dodržovaných slibů. První příslib v poli bude vyřešen na první prvek výstupního pole, druhý příslib bude druhý prvek ve výstupním poli, a tak dále.

Příklad 3: Tady je , a Promise.all() metoda čeká, dokud se všechny sliby nevyřeší.

javascript




// Simple promise that resolves after a given time> const tOut = (t) =>{> >return> new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(`Completed>in> ${t}`)> >}, t)> >})> }> // Array contains some time duration> const durations = [1000, 2000, 3000]> const promises = []>// Empty array> durations.map((duration) =>{> >// Calling the async function timeout(), so> >// at this point the async function has started> >// and enters the 'pending' state> >// pushing the pending promise to an array.> >promises.push(tOut(duration))> })> console.log(promises)> // Passing an array of pending promises to Promise.all> // Promise.all will wait till all the promises get resolves> // and then the same gets resolved.> Promise.all(promises).then(response =>console.log(response))> // It prints after previous promises gets resolved> // ['Completed in 1000', 'Completed in 2000', 'Completed in 3000']>

>

java inicializovat pole
>

Výstup :

[object Promise], [object Promise], [object Promise] . . . (gap between previous and last promises) . . Completed in 1000, Completed in 2000, Completed in 3000>

Příklad 4: Jak je ukázáno v tomto příkladu, pokud jeden ze slibů selže, pak selžou všechny ostatní sliby a výsledek se zobrazí v konzole ve formě chyby. Pak Promise.all() metoda je zamítnuta.

javascript




// Promise that resolves after a given time> const tOut = (t) =>{> >return> new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >if> (t === 2000) {> >reject(`Rejected>in> ${t}`)> >}>else> {> >resolve(`Completed>in> ${t}`)> >}> >}, t)> >})> }> const durations = [1000, 2000, 3000]> // Array contains some time durations> const promises = []>//empty array> durations.map((duration) =>{> >promises.push(tOut(duration))> >// Pushing durations in the promises array> })> // Passing an array of pending promises to Promise.all> Promise.all(promises).then(response =>console.log(response))> >// Promise.all cannot be resolved, as one of the> >// promises passed, got rejected.> >.>catch>(error =>console.log(`::Error:: ${error}`))> // Promise.all throws an error.>

>

>

Výstup :

Error Rejected in 2000>

Příklad-5: V tomto příkladu použijeme nějakou funkci časovače (zejména funkci setTimeout), která má v sobě různé časovače a ty budou zapsány do různých příslibů a dále budou tyto přísliby předány do metod Promise.all() za účelem získání výsledku.

Javascript




let first_promise =>new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(>'Resolved First after 1 second'>);> >}, 1000);> });> let second_promise =>new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(>'Resolved First after 2 seconds'>);> >}, 2000);> });> let third_promise =>new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(>'Resolved First after 3 seconds'>);> >}, 3000);> });> try> {> >let result = Promise.all([first_promise, second_promise, third_promise]);> >result.then((data) =>console.log(data));> }>catch> (error) {> >console.log(error);> }> // This code is contributed by Aman Singla...>

řetězec na znak java
>

>

Výstup:

[  'Resolved First after 1 second',  'Resolved First after 2 seconds',  'Resolved First after 3 seconds' ]>

Podporované prohlížeče:

Prohlížeče podporované JavaScript Promise.all() metody jsou uvedeny níže:

  • Google Chrome 32 a vyšší
  • Edge 12 a výše
  • Firefox 29 a vyšší
  • Opera 19 a vyšší
  • Safari 8 a vyšší
  • Internet Explorer není podporován