CodeGym /Curso de Java /Frontend SELF ES /Funciones asincrónicas

Funciones asincrónicas

Frontend SELF ES
Nivel 43 , Lección 3
Disponible

4.1 Palabra clave async

Las funciones asincrónicas en JavaScript permiten escribir código asíncrono que se ve y se lee como si fuera sincrónico. Las palabras clave async y await, introducidas en ECMAScript 2017 (ES8), facilitan el trabajo con promesas y hacen que el código sea más comprensible y manejable.

Conceptos básicos

La palabra clave async antes de la declaración de una función indica que la función es asincrónica. Una función asincrónica siempre devuelve una promesa, incluso si no tiene explícitamente un operador return. Si la función devuelve un valor, este se envuelve automáticamente en una promesa con ese valor.

Sintaxis:

    
      async function nombre() {
        // código de la función
      }
    
  

Ejemplo:

JavaScript
    
      async function greet() {
        return 'Hello, world!';
      }

      greet().then((message) => {
        console.log(message); // Imprimirá: Hello, world!
      });
    
  

4.2 Palabra clave await

La palabra clave await se utiliza dentro de una función asincrónica para pausar su ejecución hasta que la promesa se resuelva. await solo puede usarse dentro de funciones declaradas con la palabra clave async.

Sintaxis:

    
      let result = await
      promise;
    
  

Ejemplo:

JavaScript
    
      function delay(ms) {
        return new Promise((resolve) => setTimeout(resolve, ms));
      }

      async function greet() {
        await delay(2000);
        return 'Hello, world!';
      }

      async function displayGreeting() {
        const message = await greet();
        console.log(message); // Imprimirá: Hello, world! después de 2 segundos
      }

      displayGreeting();
    
  

4.3 Ejemplos de uso de async y await

Ejemplo 1: Función asincrónica con espera de múltiples promesas

JavaScript
    
      function fetchData1() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 1'), 1000));
      }

      function fetchData2() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 2'), 2000));
      }

      async function fetchAllData() {
        const data1 = await fetchData1();
        console.log(data1); // Imprimirá: Data 1 después de 1 segundo

        const data2 = await fetchData2();
        console.log(data2); // Imprimirá: Data 2 después de 2 segundos
      }

      fetchAllData();
    
  

Ejemplo 2: Ejecución paralela de operaciones asincrónicas

Para ejecutar varias operaciones asincrónicas en paralelo, se puede utilizar Promise.all() con await.

JavaScript
    
      function fetchData1() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 1'), 1000));
      }

      function fetchData2() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 2'), 2000));
      }

      async function fetchAllData() {
        const [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
        console.log(data1); // Imprimirá: Data 1 después de 2 segundos
        console.log(data2); // Imprimirá: Data 2 después de 2 segundos
      }

      fetchAllData();
    
  

Ejemplo 3: Manejo de errores usando try...catch

Las funciones asincrónicas permiten usar bloques try...catch para manejar errores, haciendo que el código sea más legible y manejable.

JavaScript
    
      function fetchDataWithError() {
        return new Promise((resolve, reject) => setTimeout(() => reject('Error occurred'), 1000));
      }

      async function fetchData() {
        try {
          const data = await fetchDataWithError();
          console.log(data);
        } catch (error) {
          console.error('Error:', error); // Imprimirá: Error: Error occurred después de 1 segundo
        }
      }

      fetchData();
    
  

Ejemplo 4: Uso de async y await en métodos de clase

Las funciones asincrónicas también se pueden usar dentro de métodos de clases.

JavaScript
    
      class DataFetcher {
        async fetchData() {
          const data = await new Promise((resolve) => setTimeout(() => resolve('Fetched Data'), 1000));
          return data;
        }
      }

      const fetcher = new DataFetcher();
      fetcher.fetchData().then((data) => {
        console.log(data); // Imprimirá: Fetched Data después de 1 segundo
      });
    
  

Ejemplo 5: Iteradores asincrónicos

Los iteradores asincrónicos permiten trabajar con flujos de datos que llegan de manera asincrónica.

JavaScript
    
      async function* asyncGenerator() {
        let i = 0;
        while (i < 3) {
          await new Promise((resolve) => setTimeout(resolve, 1000));
          yield i++;
        }
      }

      async function iterateAsyncGenerator() {
        for await (let value of asyncGenerator()) {
          console.log(value); // Imprimirá 0, 1 y 2 con un intervalo de 1 segundo
        }
      }

      iterateAsyncGenerator();
    
  
1
Опрос
Asincronía,  43 уровень,  3 лекция
недоступен
Asincronía
Asincronía
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION