logo

Metodo JavaScript Promise all()

IL Metodo Promise.all() è in realtà un metodo dell'oggetto Promise (che è anche un oggetto in JavaScript utilizzato per gestire tutte le operazioni asincrone), che accetta come input un array di promesse (un iterabile). Restituisce un singolo Promettere che si risolve quando tutte le promesse sono passate come iterabile, che si sono risolte o quando l'iterabile non contiene promesse. In un modo semplice, se una qualsiasi delle promesse trasmesse viene rifiutata, il Promessa.all() Il metodo rifiuta in modo asincrono il valore della promessa che è già stata rifiutata, indipendentemente dal fatto che le altre promesse siano state risolte o meno.

Sintassi:



Promise.all( iterable )>

parametri: Questo metodo accetta un singolo parametro iterabile che accetta un array di promesse o un normale array che contiene alcuni oggetti.

Valori restituiti: Seguono alcune regole per restituire una singola promessa:

  • Se l'argomento passato è vuoto, restituisce una Promise che lo è già risolto .
  • Se l'iterabile passato non contiene promesse, restituisce una Promessa risolta in modo asincrono .
  • Per tutti gli altri casi, restituisce una promessa in sospeso.

Adempimento e rifiuto del metodo Promise.all():



Compimento: La promessa restituita è soddisfatta,

  • Se l'iterabile passato è vuoto, questo metodo restituisce una promessa in modo sincrono che è già risolta.
  • Se tutte le promesse passate vengono soddisfatte, le promesse restituite vengono soddisfatte in modo asincrono.
  • Qui il successo dell'esecuzione di questo particolare metodo dipende totalmente da tutte le promesse di essere eseguite con successo.

Rifiuto: Se una qualsiasi delle promesse approvate viene rifiutata, questo metodo rifiuta il valore di quella promessa, indipendentemente dal fatto che le altre promesse siano state mantenute o meno. In altre parole, se una promessa non viene eseguita, il metodo Promise.all() restituirà un errore e non terrà conto del fatto che altre promesse siano state soddisfatte con successo o meno.

Gli esempi seguenti illustrano il metodo JavaScript Promise.all():



Esempio 1: Il metodo Promise.all() attende compimento

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

>

>

Produzione

[ 50, 200, 'geek' ]>

Esempio 2: Qui il metodo Promise.all() si risolve dopo 2000 ms e l'output viene mostrato come un 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(risultato +>' '>))> // Completed in 1000> // Promise.all> Promise.all([tOut(1000), tOut(2000)])> >.then(result =>console.log(risultato))>

>

>

Produzione:

Completed in 1000 Completed in 1000, Completed in 2000>

Qui, Promessa.all() il metodo è l'ordine delle promesse mantenute. La prima promessa nell'array verrà risolta nel primo elemento dell'array di output, la seconda promessa sarà un secondo elemento nell'array di output, e così via.

Esempio 3: Qui è , IL Promessa.all() Il metodo attende finché tutte le promesse non si risolvono.

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(risposta))> // It prints after previous promises gets resolved> // ['Completed in 1000', 'Completed in 2000', 'Completed in 3000']>

>

>

Produzione :

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

Esempio 4: Come mostrato in questo esempio, se una delle promesse fallisce, anche tutte le altre promesse falliranno e il risultato verrà visualizzato nella console sotto forma di Errore. Poi Promessa.all() il metodo viene rifiutato.

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(risposta))> >// Promise.all cannot be resolved, as one of the> >// promises passed, got rejected.> >.>catch>(error =>console.log(`::Errore:: ${errore}`))> // Promise.all throws an error.>

>

>

Produzione :

Error Rejected in 2000>

Esempio-5: In questo esempio, utilizzeremo alcune funzioni timer (in particolare la funzione setTimeout) con timer diversi al suo interno e queste verranno scritte all'interno di promesse diverse e inoltre tali promesse verranno passate all'interno dei metodi Promise.all() per ottenere il risultato.

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(dati));> }>catch> (error) {> >console.log(error);> }> // This code is contributed by Aman Singla...>

>

scanner java

>

Produzione:

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

Browser supportati:

I browser supportati da JavaScript Promessa.all() i metodi sono elencati di seguito:

  • Google Chrome 32 e versioni successive
  • Bordo 12 e superiori
  • Firefox 29 e versioni successive
  • Opera 19 e successive
  • Safari 8 e versioni successive
  • Internet Explorer non supportato