Introducción a JavaScript

1

Manipulación del DOM con JavaScript para Principiantes

2

Instalación de Node.js y configuración de entorno en Mac

3

JavaScript para Principiantes: Configuración y Primer Script

4

Variables en JavaScript: Declaración, Asignación y Buenas Prácticas

5

Tipos de Datos Primitivos y Complejos en JavaScript

6

Concatenación y Manipulación de Strings en JavaScript

7

Números y Operaciones en JavaScript: Enteros, Decimales y Más

8

Typecasting y Cohesión en JavaScript

9

Conversión de Tipos en JavaScript: Explícita e Implícita

Estructuras de Control y Lógica

10

Operadores de Comparación en JavaScript: Uso Práctico y Ejemplos

11

Operadores Lógicos en Programación: Uso y Ejemplos Prácticos

12

Uso de Estructuras Condicionales IF en JavaScript

13

Programación JavaScript: Crea un juego de adivinanza numérica

14

Estructura Switch: Lógica y Uso en Programación

15

Loops y estructuras de iteración en JavaScript

16

Iteración con for-of en JavaScript: uso en arrays y strings

17

Iteración de Objetos en JavaScript: Uso del Bucle forIn

18

Bucles While en JavaScript: Estructura y Uso Seguro

19

Ciclos doWhile en JavaScript: estructura y diferencias con while

Funciones y This

20

Funciones JavaScript: Creación y Uso en Descuentos de Black Friday

21

Funciones como Objetos: Conceptos Avanzados en JavaScript

22

Funciones Puras e Impuras en JavaScript

23

Arrow Functions y Enlace Léxico en JavaScript

24

Scope y Contexto de Ejecución en JavaScript

25

Entendiendo Closures y Ámbito Léxico en JavaScript

26

Programación de Funciones en JavaScript

Manipulación de Arrays

27

Arrays: Propiedades, Acceso y Creación en JavaScript

28

Arrays: Mutabilidad e Inmutabilidad en JavaScript

29

Métodos push y pop: Mutabilidad de arrays en JavaScript

30

Métodos de Arrays: Uso de map y forEach eficazmente

31

Filter y Reduce: Manejo Avanzado de Arrays en JavaScript

32

Uso de find y findIndex para búsqueda en arrays

33

Uso de slice() para extraer elementos de un array en JavaScript

34

Uso del Spread Operator en JavaScript: Copiar, Combinar y Más

Programación Orientada a Objetos

35

Propiedades y Métodos en Objetos JavaScript: Una Guía Práctica

36

Objetos en JavaScript: Creación, Métodos y Modificación

37

Creación y uso de funciones constructoras en JavaScript

38

Clases en JavaScript: Crear Objetos con Sintaxis Moderna

39

Objetos y Prototipos en JavaScript: Herencia y Manipulación Práctica

40

Prototipos y herencia en JavaScript para principiantes

41

Métodos en JavaScript: Manipulación de Prototipos

42

Uso de "this" en Clases de JavaScript

43

Diseño de Bases de Datos para Red Social

44

Validación de Usuarios con Funciones de JavaScript

Asincronía en JavaScript

45

JavaScript: Programación Síncrona y Asíncrona Paso a Paso

46

Crea Promesas en JavaScript: Estados y Uso de Then/Catch

47

Uso de Async/Await en JavaScript para Peticiones Fetch

48

Manejo de Promesas con Async/Await y Bucle for-await-of

49

Funcionamiento de HTTP: Verbs y Comunicación Cliente-Servidor

50

Métodos HTTP y Análisis de Respuestas en la Consola del Navegador

51

Peticiones HTTP con Fetch y Promesas en JavaScript

52

Envío y Recepción de Datos con Fetch y JavaScript

53

Borrado de elementos en DOM con Delegación de Eventos

54

Asignación de IDs a Elementos del DOM con JavaScript

55

Manipulación del DOM con JavaScript Vanilla

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Uso de Async/Await en JavaScript para Peticiones Fetch

47/55
Recursos

¿Cómo manejar promesas asíncronas en JavaScript utilizando async/await?

El mundo del desarrollo de software está en constante evolución y aprender nuevas formas de escribir código más limpio y eficiente es una habilidad invaluable. ¿Quieres mejorar tu forma de manejar promesas asíncronas? Vamos a explorar dos potentes técnicas de JavaScript: async/await y fetch para hacer peticiones a APIs con ejemplo concreto.

¿Qué son async y await en JavaScript?

Async/await es un paradigma que nos permite escribir código asíncrono de forma más legible y estructurada. En JavaScript, el uso de async/await nos permite manejar promesas de una manera más clara, comparada con los métodos tradicionales que usan .then() y .catch(). Al usar async/await, tu código se ve y se comporta más como el código síncrono, aunque sigue siendo asíncrono. Cuando declaras una función con async, esta automáticamente devuelve una promesa. Por otro lado, await hace que JavaScript espere a que una promesa se resuelva antes de continuar con el siguiente bloque de código.

¿Cómo utilizar fetch para obtener datos de una API?

Para poner en práctica estos conceptos, vamos a hacer una petición a una API pública usando fetch. Este método proporciona una forma fácil de obtener recursos de manera asíncrona a través de la red.

Implementación con .then() y .catch()

function fetchData() {
  fetch('https://rickandmortyapi.com/api/character')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
}

fetchData();

En este script, fetch realiza una solicitud a la API de Rick and Morty. Una vez recibida la respuesta, la convierte a JSON y luego imprime los datos. Si ocurre un error durante la solicitud, el bloque catch lo capturará y lo mostrará en la consola.

Conversión a async/await

async function fetchData() {
  try {
    const response = await fetch('https://rickandmortyapi.com/api/character');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}

fetchData();

Aquí, al usar async/await, el código se transforma significativamente en términos de legibilidad. La función fetchData es ahora una función async, y las llamadas a fetch y response.json() están precedidas por await, lo que indica que deben completarse antes de pasar a la siguiente línea. Esto hace que el código sea más fácil de leer y entender, especialmente para los desarrolladores que están acostumbrados al flujo lógico de código síncrono.

¿Por qué utilizar async/await?

  • Legibilidad: Al cambiar a async/await, el flujo de código se vuelve más natural y fácil de seguir.
  • Error Handling: La gestión de errores se centraliza a través de try/catch, lo que simplifica la depuración.
  • Simplicidad: Reduce la complejidad asociada con las cadenas de promesas mediante .then().

Nota importante: Async/await es ideal para manejar situaciones donde los pasos deben realizarse secuencialmente, pero sigue siendo necesario recordar que el código es asíncrono y no bloqueante.

Conclusión

El uso de async/await en JavaScript es una práctica moderna que le permite a los desarrolladores manejar la asincronía con mayor elegancia y claridad. Esto, combinado con métodos como fetch, crea un poderoso conjunto de herramientas para hacer solicitudes en la red mucho más manejables. ¿Te gustaría explorar más sobre la gestión de promesas en JavaScript? ¡Sigue practicando y experimentando! El camino al dominio de tecnologías modernas comienza con pequeños y sencillos pasos.

Aportes 17

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

[meen.academy/javascript/async-and-await-in-javascript/](https://meen.academy/javascript/async-and-await-in-javascript/) ## Async y Await en JavaScript **Async y await** son dos palabras clave introducidas en JavaScript (ES8) para simplificar la programación asíncrona. Antes de su llegada, se utilizaban promesas para manejar operaciones asíncronas, pero el código podía resultar complejo y difícil de leer. ### ¿Qué es Async? * **Async** se utiliza para declarar una función como asíncrona. * Una función asíncrona siempre devuelve una promesa. * Dentro de una función async, puedes utilizar la palabra clave `await`. ### ¿Qué es Await? * **Await** se utiliza únicamente dentro de una función async. * Pausa la ejecución de la función hasta que la promesa asociada se resuelva o rechace. * El valor resuelto de la promesa se asigna a la variable que está a la izquierda de `await`. **Ventajas de usar Async/Await:** * **Código más legible:** El código se parece más a código síncrono, lo que mejora la comprensión. * **Manejo de errores más fácil:** Puedes utilizar `try...catch` para manejar errores de las promesas. * **Mejor estructuración del código:** Facilita la organización del código asíncrono. **En resumen:** Async/await es una sintaxis que hace que el código asíncrono sea más fácil de escribir y leer. Transforma el código asíncrono en un estilo similar al síncrono, lo que mejora la mantenibilidad y legibilidad del código.
Async/Await es una forma moderna y más legible de trabajar con código asíncrono en JavaScript. Vamos a repasar los conceptos clave: *Async Function*: * Se declara con la palabra clave `async`. * Siempre devuelve una Promesa. *Await*: * Solo se puede usar dentro de una función async. * Pausa la ejecución de la función hasta que la Promesa se resuelva. * Desenvuelve la Promesa y devuelve su valor resuelto. *Manejo de errores*: * Se puede usar try/catch para manejar errores en operaciones asíncronas. *Async/Await con loops*: * Se puede usar con for...of para operaciones secuenciales. * Para operaciones paralelas, se puede usar map con Promise.all. *Compatibilidad con Promesas*: * Async/Await es syntactic sugar sobre Promesas. * Se puede mezclar con código basado en Promesas.
¿En la línea número 11 hace falta colocar el await? Entiendo que en la línea 10 se coloque el await porque estamos esperando a que se realice la petición con el fetch, pero una vez esa línea se ejecuta correctamente (y que por tanto tenemos la respuesta en la variable response), ¿sigue siendo necesario usar el await en la siguiente línea con el data? 🤔.
Las promesas implícitas son aquellas que no se declaran explícitamente, sino que son devueltas por funciones o métodos que internamente manejan operaciones asíncronas y devuelven promesas.
Como hace para ver ese listado en el navegador? Lo itnenté pero al darle click a fetchData me sale la funciín y ya
Mis notas: ![](https://static.platzi.com/media/user_upload/image-1787ad11-0964-4481-9317-0bee2f729b66.jpg)
Una "promise" en JavaScript es un objeto que representa la eventual finalización (o fallo) de una operación asíncrona y su valor resultante. Permite manejar operaciones asíncronas de manera más organizada y legible, facilitando la escritura de código que puede manejar resultados futuros (que pueden ser exitosos o fallidos) sin caer en el "callback hell". Las "promises" pueden estar en uno de tres estados: pendiente (pending), cumplida (fulfilled) o rechazada (rejected).
La API de Rick & Morty, al igual que otras APIs, devuelve datos en formato JSON que se pueden mostrar en la consola del navegador. Sin embargo, para visualizar estos datos en un entorno gráfico, como una página web, necesitas implementar código JavaScript que manipule el DOM y muestre los datos en elementos HTML. Por sí sola, la API no mostrará datos en un entorno gráfico; eso requiere programación adicional.
La diferencia entre usar promesas con `then` y `catch` frente a `async` y `await` es principalmente la legibilidad y el manejo de errores. Ambos métodos logran el mismo resultado, pero: 1. **Legibilidad**: `async/await` permite escribir un código que se asemeja más a un flujo secuencial, lo que facilita su comprensión. 2. **Manejo de errores**: Con `async/await`, se utiliza `try/catch`, que es más intuitivo y simplifica el manejo de errores en comparación con los múltiples `catch` que se necesitan con promesas. Ambos enfoques devuelven promesas y funcionan de manera asíncrona, pero la elección entre uno y otro depende más de la preferencia y el contexto del código.
Cuando queremos que nuestras funciones se conviertan en promesas agregamos al inicio async
En los ejemplos de la clase, entiendo que la primer función fetchData() (sin el async) bloquearía el flujo del programa hasta tener la respuesta de la API y la segunda función async fetchData() no bloquea el flujo del programa. Si alguien lo confirma, muchas gracias.
Cuando hago la promesa de fetchData() de la API de rick y morty me sale solo: `ƒ json() { [native code] }`, aquí el codigo: ![]()```js function fetchData() { fetch('https://rickandmortyapi.com/graphql') .then(response => response.json) .then(data => console.log(data)) .catch(error => console.log(error)) } ```
El call stack es una estructura de datos que almacena información sobre las funciones que están siendo ejecutadas en un programa. En JavaScript, cada vez que se llama a una función, se añade un nuevo contexto de ejecución al stack. Cuando la función termina, se elimina de la parte superior del stack. Esto permite que el motor de JavaScript sepa qué función se está ejecutando actualmente y cuál debe ejecutarse a continuación. Es esencial para entender el flujo de ejecución de tu código, especialmente en programación asíncrona con promesas y async/await.
Fetch es una función en JavaScript que permite realizar solicitudes HTTP para obtener datos de recursos externos, como APIs. Esta función retorna una promesa que se resuelve cuando la respuesta está disponible. Al usar `fetch`, puedes manejar las respuestas de manera asíncrona, aprovechando `then` y `catch` para procesar la información o manejar errores. En el contexto del curso, se utiliza para interactuar con APIs, facilitando el trabajo con datos externos en aplicaciones web.
El event loop es un componente fundamental en JavaScript que permite la ejecución de código asíncrono. Funciona como un ciclo que revisa la cola de tareas (task queue) y el call stack. Cuando el call stack está vacío, el event loop toma la primera tarea de la cola y la ejecuta, permitiendo que el código asíncrono (como promesas o callbacks) se ejecute en el momento adecuado. Esto es crucial para mantener la fluidez en aplicaciones web, ya que permite que el código continúe ejecutándose mientras espera que se completen tareas como llamadas a APIs.
Las palabras clave `async` y `await`, implementadas a partir de ES2017, son una sintaxis que simplifica la programación asíncrona, facilitando el flujo de escritura y lectura de código; por lo que es posible escribir código que funcione de forma asíncrona, pero que se lea y estructure de forma síncrona. `Async/await` funciona con código basado en Promises, pero oculta las promesas para que la lectura sea más fluida y sencilla de entender. Al definir una función como `async`, podemos usar la palabra clave `await` antes de cualquier expresión que retorne una promesa. De esta forma, la ejecución de la función externa (la función `async`) se pausará hasta que se resuelva la Promesa. La palabra clave `await` recibe una Promesa y la convierte en un valor de retorno (o genera una excepción en caso de error). Cuando usamos `await`, JavaScript esperará hasta que finalice la Promesa. Si se completa con éxito (el término utilizado es `fulfilled`), el valor obtenido es retornado. Si la Promesa es rechazada (el término utilizado es `rejected`), se retorna el error arrojado por la excepción. Un ejemplo: let response = await fetch(`https://api.com/api/user/${userId}`); let userData = await response.json(); Solo puede usar `await` en funciones declaradas con la palabra-clave `async`, así que agréguela: async function getUser(userId) { let response = await fetch(`https://api.com/api/user/${userId}`); let userData = await response.json(); return userData.name;// no es necesario await en el return } Una función declarada como `async` significa que el valor de retorno de la función será, "por dentro de javascript", una Promesa. Si la promesa se resuelve normalmente, el objeto-promesa retornará el valor. Si arroja una excepción, podemos usar try/catch como estamos acostumbrados en los programas síncronos. Para ejecutar la función `getUser()`, ya que retorna una Promesa, puedes usar `await`: exibeDatosUser(await getUser(1)) **Recordar que** `await` **solo funciona si está dentro de otra función** `async`**.** Si todavía no estás familiarizado, puedes usar `.then()` normalmente: getUser(1).then(exibeDadosUser).catch(reject)
He seguido los pasos a la vez que el profesor, usando la API de pokemon y cuando llamo a la función me da tanto el error como los datos: ![](https://i.imgur.com/jM5D0fm.png) Mi código: ```js function fetchData(){ fetch("https://pokeapi.co/api/v2/pokemon/ditto") .then((response) => response.json()) .then((data) => console.log(data)) .cath((error) => console.log(eror)) } ```