logo

Metoda JavaScript Promise all().

The Metoda Promise.all(). je pravzaprav metoda objekta Promise (ki je tudi objekt pod JavaScriptom, ki se uporablja za obravnavo vseh asinhronih operacij), ki sprejme matriko promises (iterable) kot vhod. Vrne enojno Obljuba ki se razreši, ko so vse obljube prešle kot iterable, ki so bile razrešene, ali ko iterable ne vsebuje nobenih obljub. Na preprost način, če katero od danih obljub zavrne, se Promise.all() metoda asinhrono zavrne vrednost obljube, ki je že bila zavrnjena, ne glede na to, ali so bile druge obljube razrešene ali ne.

Sintaksa:



Promise.all( iterable )>

Parametri: Ta metoda sprejme en sam parameter ponovljiv ki zavzame niz obljube ali običajno polje, ki vsebuje nekaj predmetov.

Vrnjene vrednosti: Za vrnitev ene obljube sledi nekaj pravilom:

  • Če je podani argument prazen, vrne obljubo, ki je že prazna razrešeno .
  • Če posredovana iterable ne vsebuje obljub, vrne obljubo, ki je razrešena asinhrono .
  • V vseh drugih primerih vrne čakajočo obljubo.

Izpolnitev in zavrnitev metode Promise.all():



Izpolnitev: Vrnjena obljuba je izpolnjena,

  • Če je posredovana iterable prazna, potem ta metoda sinhrono vrne obljubo, ki je že razrešena.
  • Če so vse posredovane obljube izpolnjene, se vrnjene obljube izpolnijo asinhrono.
  • Tu je uspešna izvedba te posebne metode v celoti odvisna od vseh obljub, da bodo uspešno izvedene.

Zavrnitev: Če je katera koli od posredovanih obljub zavrnjena, potem ta metoda zavrne vrednost te obljube, ne glede na to, ali so bile druge obljube razrešene ali ne. Z drugimi besedami, če katera koli obljuba ne bo izvedena, bo metoda Promise.all() vrnila napako in ne bo upoštevala, ali so druge obljube uspešno izpolnjene ali ne.

Spodnji primeri ponazarjajo metodo JavaScript Promise.all():



Primer 1: Metoda Promise.all() čaka izpolnitev

kako odstraniti prvi znak v excelu

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);> });>

>

>

css centriranje slike
Izhod

[ 50, 200, 'geek' ]>

Primer 2: Tu se metoda Promise.all() razreši po 2000 ms in izhod je prikazan kot niz.

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(rezultat +>' '>))> // Completed in 1000> // Promise.all> Promise.all([tOut(1000), tOut(2000)])> >.then(result =>console.log(rezultat))>

>

>

Izhod:

Completed in 1000 Completed in 1000, Completed in 2000>

tukaj, Promise.all() metoda je vrstni red ohranjenih obljub. Prva obljuba v matriki bo razrešena v prvi element izhodne matrike, druga obljuba bo drugi element v izhodni matriki, in tako naprej.

Primer 3: Tukaj je , the Promise.all() metoda čaka, dokler se ne razrešijo vse obljube.

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(odgovor))> // It prints after previous promises gets resolved> // ['Completed in 1000', 'Completed in 2000', 'Completed in 3000']>

>

>

Izhod:

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

Primer 4: Kot je prikazano v tem primeru, če ena od obljub ne uspe, potem vse druge obljube ne uspejo in rezultat bo prikazan v konzoli v obliki napake. Potem Promise.all() metoda je zavrnjena.

javascript

set proti zemljevidu




// 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(odgovor))> >// Promise.all cannot be resolved, as one of the> >// promises passed, got rejected.> >.>catch>(error =>console.log(`::Error:: ${error}`))> // Promise.all throws an error.>

>

>

Izhod:

branje excel datoteke v javi
Error Rejected in 2000>

Primer-5: V tem primeru bomo uporabili neko časovno funkcijo (zlasti funkcijo setTimeout), ki ima v sebi različne časovnike in ti bodo zapisani znotraj različnih obljub, nato pa bodo te obljube posredovane znotraj metod Promise.all(), da dobimo rezultat.

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...>

>

>

Izhod:

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

Podprti brskalniki:

Brskalniki, ki jih podpira JavaScript Promise.all() metode so navedene spodaj:

  • Google Chrome 32 in novejši
  • Rob 12 in več
  • Firefox 29 in novejši
  • Opera 19 in novejše
  • Safari 8 in novejši
  • Internet Explorer ni podprt