De Promise.all() methode is eigenlijk een methode van het Promise-object (dat ook een object onder JavaScript is dat wordt gebruikt om alle asynchrone bewerkingen af te handelen), die een reeks beloften (een iterabele) als invoer gebruikt. Het levert een single op Belofte dat wordt opgelost wanneer alle beloften als een iterabele zijn doorgegeven, die zijn opgelost, of wanneer de iterabele geen beloften bevat. Op een eenvoudige manier: als een van de doorgegeven beloften wordt afgewezen, wordt de Belofte.all() methode verwerpt asynchroon de waarde van de belofte die al is afgewezen, ongeacht of de andere beloften al dan niet zijn opgelost.
Syntaxis:
Promise.all( iterable )>
Parameters: Deze methode accepteert een enkele parameter itereerbaar waarvoor een array nodig is beloften of een normale array die enkele objecten bevat.
Retourwaarden: Er volgen enkele regels om een enkele belofte terug te geven:
- Als het doorgegeven argument leeg is, retourneert het een belofte die al bestaat opgelost .
- Als de doorgegeven iterabele geen beloftes bevat, retourneert deze een belofte die is opgelost asynchroon .
- Voor alle andere gevallen wordt een lopende belofte geretourneerd.
Vervulling en afwijzing van Promise.all()-methode:
Vervulling: De teruggekeerde belofte is vervuld,
- Als de doorgegeven iterabele leeg is, retourneert deze methode synchroon een belofte die al is opgelost.
- Als alle doorgegeven beloften zijn vervuld, worden de geretourneerde beloften asynchroon vervuld.
- Hier hangt de succesvolle uitvoering van deze specifieke methode volledig af van alle beloften om met succes te worden uitgevoerd.
Afwijzing: Als een van de aangenomen beloften wordt afgewezen, verwerpt deze methode de waarde van die belofte, ongeacht of de andere beloften al dan niet zijn waargemaakt. Met andere woorden: als een belofte niet wordt uitgevoerd, zal de methode Promise.all() een fout retourneren en wordt er geen rekening mee gehouden of andere beloften wel of niet met succes worden nagekomen.
De onderstaande voorbeelden illustreren de JavaScript Promise.all()-methode:
Voorbeeld 1: De methode Promise.all() wacht op vervulling
javascript
stapel in ds
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);> });> |
>
>Uitvoer
[ 50, 200, 'geek' ]>
Voorbeeld 2: Hier wordt de methode Promise.all() na 2000 ms opgelost en wordt de uitvoer weergegeven als een 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(resultaat +> ' '> ))> // Completed in 1000> // Promise.all> Promise.all([tOut(1000), tOut(2000)])> > .then(result =>console.log(resultaat))> |
>
>
Uitgang:
Completed in 1000 Completed in 1000, Completed in 2000>
Hier, Belofte.all() methode is de volgorde van de nagekomen beloften. De eerste belofte in de array wordt omgezet in het eerste element van de uitvoerarray, de tweede belofte zal een tweede element in de uitvoerarray zijn, enzovoort.
Voorbeeld 3: Hier is , de Belofte.all() methode wacht tot alle beloften zijn opgelost.
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(antwoord))> // It prints after previous promises gets resolved> // ['Completed in 1000', 'Completed in 2000', 'Completed in 3000']> |
>
Python-programma's
>
Uitgang:
[object Promise], [object Promise], [object Promise] . . . (gap between previous and last promises) . . Completed in 1000, Completed in 2000, Completed in 3000>
Voorbeeld 4: Zoals u in dit voorbeeld kunt zien: als een van de beloften faalt, mislukken alle overige beloften en wordt het resultaat in de console weergegeven in de vorm van een fout. Dan Belofte.all() methode wordt afgewezen.
javascript
10 van 100,00
// 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(antwoord))> > // Promise.all cannot be resolved, as one of the> > // promises passed, got rejected.> > .> catch> (error =>console.log(`::Error:: ${error}`))> // Promise.all throws an error.> |
>
>
Uitgang:
Error Rejected in 2000>
Voorbeeld-5: In dit voorbeeld zullen we een timerfunctie gebruiken (met name de setTimeout-functie) met verschillende timers erin en deze zullen in verschillende beloften worden geschreven en verder zullen deze beloften worden doorgegeven binnen Promise.all()-methoden om het resultaat te verkrijgen.
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...> |
>
>
Uitgang:
[ 'Resolved First after 1 second', 'Resolved First after 2 seconds', 'Resolved First after 3 seconds' ]>
Ondersteunde browsers:
De browsers die worden ondersteund door JavaScript Promise.all() methoden staan hieronder vermeld:
- Google Chrome 32 en hoger
- Rand 12 en hoger
- Firefox 29 en hoger
- Opera 19 en hoger
- Safari 8 en hoger
- Internet Explorer wordt niet ondersteund