logo

JavaScript Promise all () metodas

The Promise.all() metodas iš tikrųjų yra „Promise“ objekto metodas (kuris taip pat yra „JavaScript“ objektas, naudojamas visoms asinchroninėms operacijoms atlikti), kuris kaip įvestis naudoja pažadų masyvą (kartojamą). Tai grąžina singlą Pažadas kuri išsprendžiama, kai visi pažadai perduodami kaip kartojami, kurie buvo išspręsti arba kai kartojamoje pažadų nėra. Paprastu būdu, jei kuris nors iš įvykdytų pažadų atmetamas, Promise.all() metodas asinchroniškai atmeta jau atmesto pažado vertę, nesvarbu, ar kiti pažadai buvo įvykdyti, ar ne.

Sintaksė:



Promise.all( iterable )>

Parametrai: Šis metodas priima vieną parametrą kartojamas kuri užima masyvą pažadai arba įprastas masyvas, kuriame yra tam tikrų objektų.

Grąžinamos vertės: Norint grąžinti vieną pažadą, reikia laikytis tam tikrų taisyklių:

  • Jei priimtas argumentas tuščias, jis grąžina pažadą, kuris jau yra išspręsta .
  • Jei perduotoje iteracijoje nėra pažadų, ji grąžina pažadą, kuris yra išspręstas asinchroniškai .
  • Visais kitais atvejais jis grąžina laukiantį pažadą.

Pažado įvykdymas ir atmetimas.visi() metodas:



Išpildymas: Grąžintas pažadas įvykdytas,

  • Jei perduota iteracija yra tuščia, šis metodas sinchroniškai grąžina pažadą, kuris jau yra išspręstas.
  • Jei visi tesėti pažadai įvykdomi, grąžinami Pažadai vykdomi asinchroniškai.
  • Čia sėkmingas šio konkretaus metodo vykdymas visiškai priklauso nuo visų pažadų sėkmingai įvykdyti.

Atmetimas: Jei kuris nors iš įvykdytų pažadų atmetamas, tai šis metodas atmeta to pažado vertę, nesvarbu, ar kiti pažadai buvo įvykdyti, ar ne. Kitaip tariant, jei kurio nors pažado nepavyksta įvykdyti, Promise.all() metodas grąžins klaidą ir neatsižvelgs į tai, ar kiti pažadai sėkmingai įvykdyti, ar ne.

Toliau pateikti pavyzdžiai iliustruoja JavaScript Promise.all() metodą:



nemokama ipconfig

1 pavyzdys: Promise.all() metodas laukia išpildymas

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

>

>

Išvestis

[ 50, 200, 'geek' ]>

2 pavyzdys: Čia Promise.all() metodas išsprendžiamas po 2000 ms, o išvestis rodoma kaip masyvas.

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

>

>

Išvestis:

Completed in 1000 Completed in 1000, Completed in 2000>

Čia Promise.all() metodas yra pažadų ištesėjimo tvarka. Pirmasis pažadas masyve bus pritaikytas pirmajam išvesties masyvo elementui, antrasis pažadas bus antrasis išvesties masyvo elementas, ir taip toliau.

3 pavyzdys: Čia yra , į Promise.all() metodas laukia, kol visi pažadai išsipildys.

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']>

>

šrifto dydžiai lateksu
>

Išvestis:

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

4 pavyzdys: Kaip parodyta šiame pavyzdyje, jei vienas iš pažadų nepavyksta, visi kiti pažadai žlunga ir rezultatas bus rodomas konsolėje klaidos pavidalu. Tada Promise.all() metodas atmetamas.

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

>

>

Išvestis:

Error Rejected in 2000>

5 pavyzdys: Šiame pavyzdyje mes naudosime tam tikrą laikmačio funkciją (ypač funkciją setTimeout), kurioje yra skirtingi laikmačiai ir jie bus įrašyti skirtinguose pažaduose, o toliau tie pažadai bus perduoti Promise.all() metoduose, kad būtų gautas rezultatas.

Javascript




enum tostring java
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...>

>

>

Išvestis:

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

Palaikomos naršyklės:

Naršyklės, kurias palaiko JavaScript Promise.all() metodai išvardyti žemiau:

  • Google Chrome 32 ir naujesnės versijos
  • 12 ir aukštesnis kraštas
  • Firefox 29 ir naujesnės versijos
  • Opera 19 ir naujesnės versijos
  • „Safari 8“ ir naujesnės versijos
  • Internet Explorer nepalaikoma