De Promise.all()-metoden är faktiskt en metod för Promise-objektet (som också är ett objekt under JavaScript som används för att hantera alla asynkrona operationer), som tar en rad löften (ett iterbart) som input. Det returnerar en singel Löfte som löser sig när alla löften passerade som en iterabel, som har lösts eller när den iterable inte innehåller några löften. På ett enkelt sätt, om något av de inlämnade löftena avvisas, Promise.all() Metoden avvisar asynkront värdet av löftet som redan har avvisats, oavsett om de andra löftena har lösts eller inte.
Syntax:
Promise.all( iterable )>
Parametrar: Denna metod accepterar en enda parameter iterabel som tar en mängd löften eller en normal array som innehåller några objekt.
Returvärden: Det följer några regler för att returnera ett enda löfte:
- Om det godkända argumentet är tomt returnerar det ett löfte som redan är det löst .
- Om den godkända iterablen inte innehåller några löften, returnerar den ett löfte som är löst asynkront .
- För alla andra fall returnerar den ett väntande löfte.
Uppfyllelse och avslag av Promise.all()-metoden:
Uppfyllelse: Det återlämnade löftet är uppfyllt,
- Om den godkända iterable är tom, returnerar denna metod ett löfte synkront som redan är löst.
- Om alla godkända löften uppfylls, uppfylls de returnerade löftena asynkront.
- Här beror det framgångsrika utförandet av denna speciella metod helt på alla löften om att bli framgångsrikt utförd.
Avslag: Om något av de godkända löftena avvisas, avvisar denna metod värdet av det löftet, oavsett om de andra löftena har lösts eller inte. Med andra ord, om något löfte misslyckas med att genomföras, kommer metoden Promise.all() att returnera ett fel och den tar inte hänsyn till om andra löften uppfylls eller inte.
Exemplen nedan illustrerar JavaScript Promise.all()-metoden:
Exempel 1: Promise.all()-metoden väntar på uppfyllelse
javascript
Sridevi
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);> });> |
>
>Produktion
[ 50, 200, 'geek' ]>
Exempel 2: Här löser metoden Promise.all() efter 2000ms och utdata visas som en 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>
Här, Promise.all() metod är ordningen för de upprätthållna löftena. Det första löftet i arrayen kommer att lösas till det första elementet i utgångsmatrisen, det andra löftet kommer att vara ett andra element i output-arrayen, och så vidare.
Exempel 3: Här är , de Promise.all() metoden väntar tills alla löften löser sig.
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']> |
>
git lägg till alla
>
Utgång:
[object Promise], [object Promise], [object Promise] . . . (gap between previous and last promises) . . Completed in 1000, Completed in 2000, Completed in 3000>
Exempel 4: Som visas i det här exemplet, Om ett av löftena misslyckas, så misslyckas alla övriga löften och resultatet kommer att visas i konsolen i form av ett fel. Sedan Promise.all() metoden avvisas.
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.> |
>
>
Utgång:
Error Rejected in 2000>
Exempel-5: I det här exemplet kommer vi att använda någon timerfunktion (särskilt setTimeout-funktionen) som har olika timers i sig och de kommer att skrivas i olika löften och vidare kommer dessa löften att skickas in i Promise.all()-metoderna för att få 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...> |
>
stjärntopologi
>
Produktion:
[ 'Resolved First after 1 second', 'Resolved First after 2 seconds', 'Resolved First after 3 seconds' ]>
Webbläsare som stöds:
Webbläsarna som stöds av JavaScript Promise.all() metoderna listas nedan:
- Google Chrome 32 och senare
- Kant 12 och uppåt
- Firefox 29 och senare
- Opera 19 och uppåt
- Safari 8 och uppåt
- Internet Explorer stöds inte