logo

JavaScript Promise all() Metode

Det Promise.all() metode er faktisk en metode til Promise-objektet (som også er et objekt under JavaScript, der bruges til at håndtere alle de asynkrone operationer), der tager en række løfter (et iterable) som input. Det returnerer en enkelt Løfte der løses, når alle løfterne er gået som en iterable, som er løst, eller når den iterable ikke indeholder løfter. På en enkel måde, hvis nogen af ​​de indgivne løfter afvises, Promise.all() metode afviser asynkront værdien af ​​løftet, der allerede er blevet afvist, uanset om de andre løfter er blevet løst eller ej.

Syntaks:



Promise.all( iterable )>

Parametre: Denne metode accepterer en enkelt parameter iterable som tager en række af løfter eller et normalt array, der indeholder nogle objekter.

Returværdier: Det følger nogle regler for at returnere et enkelt løfte:

  • Hvis bestået argument er tomt, returnerer det et løfte, der allerede er løst .
  • Hvis den beståede iterable ikke indeholder løfter, returnerer den et løfte, der er løst asynkront .
  • For alle andre tilfælde returnerer det et afventende løfte.

Opfyldelse og afvisning af Promise.all() metode:



Opfyldelse: Det returnerede løfte er opfyldt,

  • Hvis den beståede iterable er tom, returnerer denne metode et løfte synkront, som allerede er løst.
  • Hvis alle de afgivne løfter bliver opfyldt, bliver de returnerede løfter opfyldt asynkront.
  • Her afhænger den vellykkede udførelse af denne særlige metode fuldstændigt af alle løfter om at få succes henrettet.

Afvisning: Hvis nogle af de afgivne løfter afvises, afviser denne metode værdien af ​​løftet, uanset om de andre løfter er blevet løst eller ej. Med andre ord, hvis et løfte ikke bliver udført, vil Promise.all()-metoden returnere en fejl, og den vil ikke tage højde for, om andre løfter er opfyldt eller ej.

Nedenstående eksempler illustrerer JavaScript Promise.all()-metoden:



Eksempel 1: Promise.all() metoden venter på opfyldelse

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

til loop java
>

>

Produktion

[ 50, 200, 'geek' ]>

Eksempel 2: Her løses Promise.all()-metoden efter 2000ms, og outputtet vises som et array.

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

>

>

Produktion:

Completed in 1000 Completed in 1000, Completed in 2000>

Her, Promise.all() metode er rækkefølgen af ​​de opretholdte løfter. Det første løfte i arrayet vil blive løst til det første element i output-arrayet, det andet løfte vil være et andet element i output-arrayet, og så videre.

Eksempel 3: Her er , det Promise.all() metoden venter, indtil alle løfter er løst.

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

>

>

Output:

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

Eksempel 4: Som vist i dette eksempel, hvis et af løfterne mislykkes, så mislykkes alle de øvrige løfter, og resultatet vil blive vist i konsollen i form af en fejl. Derefter Promise.all() metode bliver afvist.

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

>

>

Output:

Error Rejected in 2000>

Eksempel-5: I dette eksempel vil vi bruge en eller anden timerfunktion (især setTimeout-funktionen), som har forskellige timere i sig, og disse vil blive skrevet inde i forskellige løfter, og yderligere vil disse løfter blive videregivet i Promise.all()-metoderne for at opnå resultatet.

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

>

>

Produktion:

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

Understøttede browsere:

De browsere, der understøttes af JavaScript Promise.all() metoder er anført nedenfor:

  • Google Chrome 32 og nyere
  • Kant 12 og derover
  • Firefox 29 og nyere
  • Opera 19 og nyere
  • Safari 8 og nyere
  • Internet Explorer understøttes ikke