logo

JavaScript Promise all() -menetelmä

The Promise.all() -menetelmä on itse asiassa Promise-objektin menetelmä (joka on myös JavaScript-objekti, jota käytetään käsittelemään kaikkia asynkronisia toimintoja), joka ottaa syötteenä joukon lupauksia (iteroitavaa). Se palauttaa yhden Lupaus joka ratkeaa, kun kaikki lupaukset ovat menneet iteroitavissa, jotka ovat ratkaistu, tai kun iteroitava ei sisällä lupauksia. Yksinkertaisella tavalla, jos jokin luovutetuista lupauksista hylätään, Promise.all() menetelmä hylkää asynkronisesti jo hylätyn lupauksen arvon riippumatta siitä, onko muut lupaukset ratkaistu vai eivät.

Syntaksi:



Promise.all( iterable )>

Parametrit: Tämä menetelmä hyväksyy yhden parametrin toistettavissa joka vie joukon lupauksia tai normaali taulukko, joka sisältää joitain objekteja.

Palautusarvot: Yhden lupauksen palauttaminen noudattaa joitain sääntöjä:

  • Jos hyväksytty argumentti on tyhjä, se palauttaa lupauksen, joka on jo ratkaistu .
  • Jos hyväksytty iterable ei sisällä lupauksia, se palauttaa lupauksen, joka on ratkaistu asynkronisesti .
  • Kaikissa muissa tapauksissa se palauttaa odottavan lupauksen.

Promise.all() -menetelmän täyttäminen ja hylkääminen:



Toteutus: Palautettu lupaus on täytetty,

  • Jos hyväksytty iterable on tyhjä, tämä menetelmä palauttaa synkronisesti lupauksen, joka on jo ratkaistu.
  • Jos kaikki luvatut lupaukset täyttyvät, palautetut Lupaukset täyttyvät asynkronisesti.
  • Tässä tämän tietyn menetelmän onnistunut toteutus riippuu täysin kaikista lupauksista saada onnistuneesti toteutettu.

Hylkääminen: Jos jokin annetuista lupauksista hylätään, tämä menetelmä hylkää kyseisen lupauksen arvon riippumatta siitä, onko muut lupaukset ratkaistu vai eivät. Toisin sanoen, jos jokin lupaus epäonnistuu, Promise.all() -menetelmä palauttaa virheen, eikä se ota huomioon, toteutuvatko muut lupaukset onnistuneesti vai ei.

Alla olevat esimerkit havainnollistavat JavaScript Promise.all() -menetelmää:



Esimerkki 1: Promise.all() -metodi odottaa täyttymys

javascript




passaa muuten jos

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

>

>

javascriptin kommentti
Lähtö

[ 50, 200, 'geek' ]>

Esimerkki 2: Tässä Promise.all() -metodi ratkaisee 2000 ms jälkeen ja tulos näytetään taulukkona.

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

>

>

Lähtö:

Completed in 1000 Completed in 1000, Completed in 2000>

Tässä, Promise.all() menetelmä on pidettyjen lupausten järjestys. Ensimmäinen lupaus taulukossa ratkaistaan ​​tulostaulukon ensimmäiseksi elementiksi, toinen lupaus on tulostaulukon toinen elementti, ja niin edelleen.

Esimerkki 3: Täällä on , the Promise.all() menetelmä odottaa, kunnes kaikki lupaukset ratkeavat.

javascript




dynaaminen taulukko javassa

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

>

>

Lähtö:

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

Esimerkki 4: Kuten tässä esimerkissä näkyy, jos yksi lupauksista epäonnistuu, kaikki muut lupaukset epäonnistuvat ja tulos näytetään konsolissa Virhe-muodossa. Sitten Promise.all() menetelmä hylätään.

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

miten saan selville näytön koon

>

>

Lähtö:

Error Rejected in 2000>

Esimerkki-5: Tässä esimerkissä käytämme jotain ajastinfunktiota (erityisesti setTimeout-funktiota), jossa on eri ajastimet ja ne kirjoitetaan eri lupausten sisään ja edelleen ne lupaukset välitetään Promise.all()-metodeissa tuloksen saamiseksi.

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

>

>

Lähtö:

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

Tuetut selaimet:

Selaimet, joita tukee JavaScript Promise.all() menetelmät on lueteltu alla:

  • Google Chrome 32 ja uudemmat
  • Reuna 12 ja yli
  • Firefox 29 ja uudemmat
  • Opera 19 ja uudemmat
  • Safari 8 ja uudemmat
  • Internet Exploreria ei tueta