¿Cómo ejecutar una array determinada de promesas en serie en JavaScript?

Dada una serie de Promesas, tenemos que ejecutar eso en una serie. Para realizar esta tarea, podemos usar then(), para ejecutar la siguiente promesa, después de completar una promesa.

Enfoque : El método then() devuelve una Promesa, que nos ayuda a enstringr promesas/métodos. El método Promise.resolve() ejecuta la primera devolución de llamada y, cuando se cumple esta promesa, pasa a la siguiente función callback1 y continúa hasta que se cumplen todas las promesas. De esta forma, podemos ejecutar todas las Promesas en serie.

Sintaxis:

Promise.resolve( callback0 )
.then( callback1 )
.then( callback2 )
.then( callback3 )...    

Ejemplo 1: En este ejemplo, ejecutaremos 3 promesas enstringndo cada una de ellas con el método then().

HTML

<html>
<body>
  <h1 style="color: green;">
    GeeksforGeeks
  </h1>
  <b>Promises</b>
  
  <script>
    // Define an asynchronous function,
    // results in returning a promise
    async function task(url) {
      console.log(url + " will be fetched now")
  
      return fetch(url);
    }
  
    // Declaring an array of URLs
    let arr = [
      "https://www.google.com",
      "https://www.facebook.com",
      "https://www.twitter.com"
    ];
  
    // Resolving the first task
    Promise.resolve(() => {
      return task(arr[0]);
    })
  
    // Resolving the second task
      .then(() => {
        return task(arr[1]);
      })
  
    // Resolving the third task
      .then(() => {
        return task(arr[2]);
      });
  </script>
</body>
</html>

Producción:

https://www.facebook.com will be fetched now
https://www.twitter.com will be fetched now

El enfoque anterior no es factible si hay muchas más promesas en la array. El enstringmiento de la función sería muy agotador y haría que el código fuera largo. Podemos usar la función de array forEach() para ejecutar las promesas almacenando los resultados en una variable y actualizando esa variable en cada promesa. Esto pasará automáticamente por todas las promesas y uno puede evitar escribir repetidamente las declaraciones the () .

Ejemplo 2: en este ejemplo, ejecutaremos varias promesas utilizando el método forEach().

HTML

<html>
<body>
  <h1 style="color: green;">
      GeeksforGeeks
  </h1>
  <b>Promises</b>
  <script>
  
    // Define an asynchronous function
    async function task(url) {
      return fetch(url);
    }
  
    // Define array that has to be processed
    // by the asynchronous function
    let arr = [
      "https://www.google.com",
      "https://www.facebook.com",
      "https://www.twitter.com",
      "https://www.youtube.com",
      "https://www.netflix.com",
    ];
  
    // Declare a Promise using its resolve constructor
    let promise = Promise.resolve();
  
    // Use the forEach function to evaluate
    // the promises in series
      
    // The value of
    // p would be the result
    // of previous promise
    arr.forEach((url, index) => {
      promise = promise.then(() => {
  
        let para = document.createElement("p");
        para.innerText = 
          "The async request of " + url +
          " has been resolved";
  
        document.body.appendChild(para);
  
        return task(url);
      });
    });
  </script>
</body>
</html>

Producción:

Publicación traducida automáticamente

Artículo escrito por ManishKhetan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *