logo

JavaScript Promise all() Mètode

El Mètode Promise.all(). En realitat, és un mètode de l'objecte Promise (que també és un objecte sota JavaScript utilitzat per gestionar totes les operacions asíncrones), que pren una sèrie de promeses (una iterable) com a entrada. En torna un sol Promesa que es resol quan totes les promeses van passar com a iterables, que s'han resolt, o quan l'iterable no conté promeses. D'una manera senzilla, si alguna de les promeses transmeses rebutja, el Promesa.tot() El mètode rebutja de manera asíncrona el valor de la promesa que ja ha estat rebutjada, tant si les altres promeses s'han resolt com si no.

Sintaxi:



canviar el nom de la carpeta de Linux
Promise.all( iterable )>

Paràmetres: Aquest mètode accepta un únic paràmetre iterable que pren una matriu de promeses o una matriu normal que conté alguns objectes.

Valors de retorn: Es segueixen algunes regles per retornar una única promesa:

  • Si l'argument passat està buit, retorna una Promesa que ja ho és resolt .
  • Si l'iterable passat no conté promeses, retorna una promesa que es resol de manera asíncrona .
  • Per a la resta de casos, retorna una Promesa pendent.

Compliment i rebuig de Promise.all() Mètode:



Realització: La promesa retornada es compleix,

  • Si l'iterable passat està buit, aquest mètode retorna una promesa de manera sincrònica que ja està resolta.
  • Si es compleixen totes les promeses aprovades, les promeses retornades es compleixen de manera asíncrona.
  • Aquí l'execució reeixida d'aquest mètode en particular depèn totalment de totes les promeses per executar-se amb èxit.

Rebuig: Si es rebutja alguna de les promeses aprovades, aquest mètode rebutja el valor d'aquesta promesa, tant si les altres promeses s'han resolt com si no. En altres paraules, si alguna promesa no s'executa, el mètode Promise.all() retornarà un error i no tindrà en compte si les altres promeses es compleixen amb èxit o no.

Els exemples següents il·lustren el mètode JavaScript Promise.all():



Exemple 1: El mètode Promise.all() espera realització

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

>

>

mètodes de llista de matrius java
Sortida

[ 50, 200, 'geek' ]>

Exemple 2: Aquí el mètode Promise.all() es resol després de 2000 ms i la sortida es mostra com una matriu.

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

>

>

Sortida:

Completed in 1000 Completed in 1000, Completed in 2000>

Aquí, Promesa.tot() mètode és l'ordre de les promeses mantingudes. La primera promesa de la matriu es resoldrà amb el primer element de la matriu de sortida, la segona promesa serà un segon element de la matriu de sortida, etcètera.

Exemple 3: Aquí està , el Promesa.tot() El mètode espera fins que es resolguin totes les promeses.

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

>

>

Sortida:

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

Exemple 4: Com es mostra en aquest exemple, si una de les promeses falla, llavors totes les altres promeses fallen i el resultat es mostrarà a la consola en forma d'error. Aleshores Promesa.tot() el mètode és rebutjat.

javascript




concatenació de cadenes

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

javafx
>

>

Sortida:

Error Rejected in 2000>

Exemple-5: En aquest exemple, utilitzarem alguna funció de temporitzador (especialment la funció setTimeout) amb temporitzadors diferents i s'escriuran dins de diferents promeses i, a més, aquestes promeses es passaran dins dels mètodes Promise.all() per tal d'obtenir el resultat.

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

>

>

Sortida:

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

Navegadors compatibles:

Els navegadors compatibles amb JavaScript Promise.all() els mètodes s'enumeren a continuació:

  • Google Chrome 32 i superior
  • Edge 12 i superior
  • Firefox 29 i superior
  • Opera 19 i superior
  • Safari 8 i superior
  • Internet Explorer no és compatible