logo

JavaScript Promise all() Metode

De Promise.all()-metoden er faktisk en metode for Promise-objektet (som også er et objekt under JavaScript som brukes til å håndtere alle de asynkrone operasjonene), som tar en rekke løfter (et iterable) som input. Den returnerer en singel Love som løser seg når alle løftene ble gitt som en iterabel, som har løst seg, eller når den iterable inneholder ingen løfter. På en enkel måte, hvis noen av de vedtatte løftene avvises, Promise.all() metoden avviser asynkront verdien av løftet som allerede er avvist, uansett om de andre løftene er løst eller ikke.

Syntaks:



Promise.all( iterable )>

Parametere: Denne metoden aksepterer en enkelt parameter gjentakelig som tar en rekke løfter eller en normal matrise som inneholder noen objekter.

Returverdier: Det følger noen regler for å returnere et enkelt løfte:

  • Hvis bestått argument er tomt, returnerer det et løfte som allerede er det løst .
  • Hvis den bestått iterable ikke inneholder løfter, returnerer den et løfte som er løst asynkront .
  • For alle andre tilfeller returnerer den et ventende løfte.

Oppfyllelse og avvisning av Promise.all()-metoden:



Oppfyllelse: Det returnerte løftet er oppfylt,

  • Hvis den bestått iterable er tom, returnerer denne metoden et løfte synkront som allerede er løst.
  • Hvis alle de godkjente løftene blir oppfylt, blir de returnerte løftene oppfylt asynkront.
  • Her avhenger den vellykkede gjennomføringen av denne spesielle metoden helt av alle løfter om å bli vellykket utført.

Avslag: Hvis noen av de vedtatte løftene avvises, avviser denne metoden verdien av løftet, uansett om de andre løftene har blitt løst eller ikke. Med andre ord, hvis et løfte ikke blir utført, vil Promise.all()-metoden returnere en feil, og den vil ikke ta hensyn til om andre løfter er oppfylt eller ikke.

Eksemplene nedenfor illustrerer JavaScript Promise.all()-metoden:



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

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

>

Produksjon

[ 50, 200, 'geek' ]>

Eksempel 2: Her løses Promise.all()-metoden etter 2000ms og utdataene vises som en matrise.

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

>

>

Produksjon:

Completed in 1000 Completed in 1000, Completed in 2000>

Her, Promise.all() metoden er rekkefølgen på de opprettholdte løftene. Det første løftet i matrisen vil bli løst til det første elementet i utmatrisen, det andre løftet vil være et andre element i utmatrisen, og så videre.

Eksempel 3: Her er , de Promise.all() metoden venter til alle løftene løser seg.

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

>

>

Utgang:

[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 eksemplet, hvis ett av løftene mislykkes, så mislykkes alle de andre løftene og resultatet vil vises i konsollen i form av en feil. Deretter Promise.all() metoden blir avvist.

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

>

>

Utgang:

Error Rejected in 2000>

Eksempel-5: I dette eksemplet vil vi bruke noen timer-funksjon (spesielt setTimeout-funksjonen) som har forskjellige timere i den, og de vil bli skrevet i forskjellige løfter, og videre vil disse løftene bli sendt i Promise.all()-metodene for å oppnå 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...>

>

>

Produksjon:

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

Støttede nettlesere:

Nettleserne som støttes av JavaScript Promise.all() metoder er oppført nedenfor:

  • Google Chrome 32 og nyere
  • Kant 12 og høyere
  • Firefox 29 og nyere
  • Opera 19 og nyere
  • Safari 8 og nyere
  • Internet Explorer støttes ikke