¿Cómo funcionan las Promises y Async/Await en JavaScript? [2022]

Carlos Azaustre - Aprende JavaScript
23 Jun 202011:59

Summary

TLDREn este video, Carlos Azaústre, el presentador, aborda el tema de la sincronía en JavaScript, centrando su atención en el uso de promesas y la sintaxis `async/await`. Comienza explicando cómo la ejecución de código JavaScript puede verse afectada por retrasos en la red, lo que lleva a la necesidad de manejar la asincronía. Para ilustrar esto, utiliza la función `setTimeout` para simular una solicitud a una API y muestra cómo las promesas pueden manejar la resolución de tales tareas de manera eficiente. Luego, introduce la sintaxis `async/await` como una forma más elegante y legible de escribir código asíncrono, comparándola con el enfoque tradicional de las promesas y `.then()`/`.catch()`. Carlos destaca que ambas formas son válidas y compatibles con la mayoría de los navegadores, dejando la elección al desarrollador según las necesidades del proyecto. El video termina con una invitación a los espectadores para que dejen sus comentarios y dudas, y promueve la interacción con el canal.

Takeaways

  • 📚 Carlos Azaústre es el presentador del canal y habla sobre la sincronía en JavaScript, específicamente el uso de Promesas, `async` y `await`.
  • 🌐 Utiliza jsbing.com para ejecutar y ver la salida de código JavaScript, HTML y CSS sin necesidad de un editor o configuración.
  • 🎬 Se simula una situación en la que los datos, que podrían provenir de una API o servicio, tienen un retardo en su entrega.
  • ⏱️ `setTimeout` se utiliza para simular la sincronía en JavaScript, ejecutando una función después de un tiempo determinado.
  • 🔄 Las Promesas son objetos especiales de JavaScript que permiten manejar el retardo en la ejecución del código de manera asíncrona.
  • 📁 Una Promesa se resuelve con un valor o se rechaza con un error, siempre devolviendo algo al final de su ejecución.
  • 🔗 Las Promesas permiten concatenar operaciones asíncronas, ejecutándolas una después de la otra en secuencia.
  • 📝 `async/await` es una forma de escribir código asíncrono de manera más legible y secuencial, aunque internamente sigue utilizando Promesas.
  • 🚀 La palabra reservada `await` se utiliza dentro de una función `async` para pausar la ejecución hasta que una Promesa se resuelva.
  • 🛑 `try/catch` se puede utilizar para manejar errores en código `async`, capturando cualquier excepción que se lance.
  • ✅ La elección entre usar Promesas y `async/await` depende de preferencias personales y necesidades específicas del proyecto.

Q & A

  • ¿Qué es la sincronía en JavaScript y cómo afecta la ejecución del código?

    -La sincronía en JavaScript se refiere a cómo el código se ejecuta en orden, una instrucción después de la otra. Cuando hay una operación asíncrona, como una llamada a una API, el código siguiente no espera a que la operación termine antes de ejecutarse, lo que puede llevar a problemas de consistencia de datos.

  • ¿Qué son las Promesas en JavaScript y cómo resuelven los problemas de sincronía?

    -Las Promesas son objetos especiales de JavaScript que representan el resultado de una operación asíncrona. Permiten manejar el éxito o fracaso de una operación de manera separada, evitando así el problema de la sincronía y facilitando la programación orientada a eventos.

  • ¿Cómo se utiliza la función `setTimeout` para simular una operación asíncrona?

    -La función `setTimeout` se utiliza para ejecutar un fragmento de código después de un cierto período de tiempo. En el ejemplo, se utiliza para simular un retardo en la obtención de datos, imitando así una operación asíncrona.

  • ¿Qué hace la función `resolve` en el contexto de una Promesa?

    -La función `resolve` es una de las dos funciones que se pasan como argumentos al crear una nueva Promesa. Se invoca cuando la operación asíncrona finaliza con éxito, y se utiliza para proporcionar el valor resultante de la Promesa.

  • ¿Cómo se utiliza la palabra clave `async` y `await` para escribir código asíncrono de manera más legible?

    -La palabra clave `async` se utiliza para marcar una función como asíncrona, y `await` se utiliza dentro de una función asíncrona para esperar a que se resuelva una Promesa. Esto permite escribir código que se comporta de manera similar al código sincrono, facilitando su lectura y mantenimiento.

  • ¿Qué es `async/await` y cómo se diferencia de las Promesas tradicionales?

    -El `async/await` es una sintaxis más moderna y legible para manejar operaciones asíncronas en JavaScript. Aunque funciona internamente con Promesas, permite escribir código que parezca secuencial, simplificando la programación asíncrona.

  • ¿Cómo se maneja un error en una operación asíncrona utilizando `async/await`?

    -Con `async/await`, los errores se manejan dentro de un bloque `try/catch`. Si la operación asíncrona produce un error, se lanza la excepción y se puede capturar en el bloque `catch`.

  • ¿Por qué es importante manejar tanto el éxito como el fracaso de una operación asíncrona?

    -Es importante manejar tanto el éxito como el fracaso de una operación asíncrona para garantizar la robustez del programa. Esto permite que el código reaccione adecuadamente a diferentes situaciones y maneje errores de manera efectiva.

  • ¿Cómo se utiliza la función `then` en una Promesa para manejar el resultado de una operación asíncrona?

    -La función `then` se utiliza para especificar qué hacer una vez que una Promesa se resuelve. Recibe el valor resultante de la Promesa y permite encadenar más operaciones o manejar el resultado de manera adecuada.

  • ¿Qué es `.catch` y cómo se utiliza en el manejo de errores de Promesas?

    -El método `.catch` se utiliza para manejar errores en una Promesa. Se ejecuta si la Promesa se rechaza, es decir, si ocurre un error en la operación asíncrona que la Promesa representa.

  • ¿Cómo se puede concatenar Promesas para ejecutar varias operaciones asíncronas en secuencia?

    -Se pueden concatenar Promesas utilizando la función `.then()` para encadenar operaciones asíncronas. Cada `.then()` después de la primera maneja el resultado de la Promesa devuelta por el `.then()` anterior.

  • ¿Cómo se utiliza el operador `await` dentro de una función marcada con `async`?

    -El operador `await` se utiliza dentro de una función `async` para pausar la ejecución de la función hasta que una Promesa se resuelva. Permite escribir código asíncrono de manera más clara y estructurada.

Outlines

00:00

😀 Introducción a la sincronía en JavaScript

El primer párrafo presenta al canal y a su anfitrión, Carlos Azaústre, y se centra en la sincronía en JavaScript, específicamente el uso de Promesas, 'async' y 'await'. Se describe cómo la ejecución de código JavaScript puede verse afectada por retrasos en la red, y cómo las Promesas pueden manejar esta asincronía. Se utiliza la función 'setTimeout' para simular la latencia en la obtención de datos, y se discute cómo las Promesas permiten que el código se ejecute de manera más eficiente y cómo se resuelven los errores.

05:02

📚 Utilización de 'async' y 'await' para manejar asincronía

El segundo párrafo profundiza en el uso de 'async' y 'await' en JavaScript, que permiten escribir código de manera más secuencial a pesar de que la ejecución sigue siendo asíncrona. Se muestra cómo se puede utilizar 'await' para esperar la resolución de una Promesa y cómo se puede manejar el error en caso de que la Promesa sea rechazada. Además, se destaca la importancia de encapsular el código 'await' dentro de una función asíncrona y se menciona el uso de bloques 'try' y 'catch' para capturar posibles errores.

10:04

🔍 Comparación entre Promesas y 'async'/'await'

El tercer párrafo compara las Promesas con 'async' y 'await', destacando que ambos son mecanismos para manejar la asincronía en JavaScript y que son fundamentalmente equivalentes. Se menciona que, aunque 'async' y 'await' ofrecen una sintaxis más limpia y legible, en ocasiones puede ser más práctico utilizar las Promesas con sus métodos '.then()' y '.catch()'. Se concluye con una invitación a los espectadores para que dejen sus comentarios y dudas y se les anima a seguir el canal para recibir más información en futuras publicaciones.

Mindmap

Keywords

💡Sincronía

La sincronía en programación se refiere a la gestión de las operaciones que no son inmediatas, como las llamadas a una API o la espera de una respuesta de red. En el video, el tema de la sincronía es central, ya que se aborda cómo manejar la asincronía en JavaScript usando promesas y async/await.

💡JavaScript

JavaScript es un lenguaje de programación ampliamente utilizado para crear aplicaciones web interactivas. En el video, se utiliza para ilustrar cómo se gestionan las operaciones asincrónicas a través de promesas y async/await.

💡Promesas

Las promesas en JavaScript son un objeto que representa la eventual completación (o fracaso) de una operación asíncrona. En el video, se explica cómo las promesas permiten manejar la asincronía de manera más elegante y cómo se relacionan con la función async/await.

💡Async/Await

Async/Await es una forma de escribir código asíncrono de una manera que se comporta como si fuera síncrono. En el video, se muestra cómo async/await simplifica la escritura de funciones asíncronas, haciendo el código más legible.

💡setTimeout

setTimeout es una función de JavaScript que permite ejecutar un código después de un determinado número de milisegundos. En el video, setTimeout se utiliza para simular la asincronía, demostrando cómo se comporta la función con un retraso.

💡Función

Una función en JavaScript es un bloque de código que solo se ejecuta cuando se llama. En el contexto del video, las funciones son fundamentales para entender cómo se manejan las promesas y async/await, que son llamadas para manejar operaciones asincrónicas.

💡Callback

Un callback es una función que se pasa a otra función como argumento y que se ejecuta dentro de la función que la recibe. En el video, se menciona cómo los callbacks son una forma de manejar la asincronía, aunque se sugiere que las promesas y async/await son formas más modernas y limpias de hacerlo.

💡Error Handling

El manejo de errores en programación es la capacidad de un programa para identificar y responder adecuadamente a condiciones inesperadas. En el video, se discute cómo se manejan los errores en el contexto de las promesas y async/await, usando métodos como .catch para capturar errores.

💡Data Root

En el video, la 'raíz de datos' se refiere a una estructura de datos que contiene información, como una lista de películas con sus títulos y años de estreno. Se utiliza como ejemplo para ilustrar cómo se podría manejar la obtención de datos asincrónicamente.

💡Web Application

Una aplicación web es un programa informático que se ejecuta en un navegador web y se utiliza para interactuar con el usuario a través de la web. En el video, se menciona un ejemplo de una aplicación web que permite ejecutar código JavaScript y ver la salida y la consola rápidamente.

💡API

API (Interfaz de Programación de Aplicaciones) es un conjunto de rutinas y protocolos que permite el acceso a los servicios de un software. En el video, se hace referencia a las llamadas a una API como un ejemplo de operaciones que requieren manejo de asincronía.

Highlights

Carlos Azaústre, el creador del canal, presenta un video sobre la sincronía en JavaScript.

Se discute el uso de Promesas, `async` y `await` para manejar la asincronía en JavaScript.

Se utiliza la plataforma js bin.com para ejecutar y visualizar código JavaScript, HTML y CSS.

Se simula una API que devuelve datos de películas con un retardo usando `setTimeout`.

Se muestra cómo las Promesas permiten manejar la retroalimentación de datos de manera asíncrona.

Se introduce el concepto de `resolve` y `reject` en las Promesas.

Se explica que `async` y `await` son una forma más legible de escribir código asíncrono.

Se menciona que `async` y `await` son compatibles con casi todos los navegadores modernos.

Se demuestra cómo `await` se utiliza para esperar la resolución de una Promesa antes de continuar.

Se ilustra cómo se puede manejar errores usando `try` y `catch` con `async` y `await`.

Se proporciona un ejemplo de cómo forzar un error en una Promesa y cómo se maneja ese error.

Se discute la elección entre el uso de Promesas y `async`/`await` dependiendo de la legibilidad y la simplicidad.

Se aconseja que la decisión de usar Promesas o `async`/`await` sea una cuestión de preferencia personal y proyecto.

Se invita a los espectadores a dar like, suscribirse y comentar con sus dudas o impresiones.

Carlos Azaústre alienta a la participación y comentarios para futuras sesiones y tutoriales.

Se ofrece un resumen de las ventajas de las Promesas y `async`/`await` en la gestión de la asincronía en JavaScript.

Se destaca la importancia de la comprensión de la sincronía en el desarrollo de aplicaciones web modernas.

Transcripts

play00:00

muy buenas y bienvenido o bienvenida de

play00:02

nuevo a mi canal mi nombre es carlos

play00:03

azaústre y puedes encontrarme en

play00:05

instagram como carlos austero hablar de

play00:07

la sincronía javascript en concreto el

play00:10

uso de promesas it y también de asinca

play00:13

way como a mí me gusta directamente

play00:15

vamos a pasar al código para que veas

play00:17

cómo funciona vamos a ello veamos

play00:19

entonces el ejemplo tengo que ha abierto

play00:21

js bing.com que es una aplicación web

play00:23

que nos permite ejecutar código

play00:25

javascript también html css y ver la

play00:28

salida y también la consola rápidamente

play00:30

sin tener que abrir ningún editor tener

play00:32

que configurar nada así podemos probar

play00:34

este ejemplo rápido entonces para

play00:37

empezar vamos a imaginar que tenemos una

play00:39

raíz de datos que lo tengo aquí copiado

play00:41

lo voy a pegar es una raíz de datos que

play00:44

son en este caso tres objetos que bueno

play00:46

simulan unas películas no tienen una

play00:49

tienen un title y tienen el año en el

play00:52

que se estrenaron vale entonces

play00:56

imaginemos que tenemos una función que

play00:58

devuelva estos datos

play01:00

la podemos llamar perfectamente de datos

play01:06

datos

play01:09

tenemos una función y esto van

play01:11

directamente devuelve los datos vamos a

play01:14

ver que cuando la llamamos un con solo

play01:21

pues los tenemos ahí directamente porque

play01:25

esto es algo sin crono es decir yo tengo

play01:27

un array de datos y tengo una función

play01:29

que me los devuelve y ya está pero

play01:31

imaginemos que estos datos pues no los

play01:35

tenemos aquí sino que es una p que nos

play01:37

devuelve ese array u otro servicio

play01:40

etcétera cualquier llamada que se haga a

play01:42

través de la red tiene un pequeño delay

play01:45

un tiempo en el que tarda en ejecutarse

play01:47

pueden ser milisegundos pero ya eso

play01:50

produce la sincronía de que no es algo

play01:53

directo como esto no lo tenemos en

play01:55

ningún servicio sino que es una red de

play01:57

datos vamos a simular esa sincronía con

play02:00

la función set time out day time out en

play02:03

java script nos permite ejecutar una

play02:05

función pasado x tiempo vamos a verlo

play02:08

entonces esto luego ya

play02:11

comentar y vamos a crear de nuevo qué

play02:14

datos

play02:20

y

play02:22

pero ahora simulando ese retraso con

play02:24

sentime out

play02:26

que recibe una función

play02:30

el segundo parámetro es el tiempo vamos

play02:33

a poner 1.500 milisegundos un segundo y

play02:35

medio que como ves es muy poco pero ya

play02:37

es suficiente para que exista esa

play02:40

sincronía y qué va a hacer esta función

play02:42

2 directamente lo que dijimos devolver

play02:44

esa raíz de datos

play02:47

si ahora lo imprimimos por pantalla

play02:51

vamos a borrar y corremos nos devuelven

play02:54

de fainé porque cuando llevamos a la

play02:56

función se va a ejecutar ese time out

play02:58

iba a esperar 1500 segundos y como no

play03:00

hay nada que haga que digamos espere a

play03:03

que esto se resuelva pues directamente

play03:05

nos devuelven de find porque no devuelve

play03:07

nada devuelve datos pero todavía no ha

play03:10

pasado ese tiempo como se resuelve esto

play03:12

pues esto se resuelve gracias a las

play03:14

promesas son un objeto especial de

play03:16

javascript que nos permite ejecutar un

play03:19

trozo de código y cuando esté listo se

play03:23

devuelve y bien y si no hay cualquier

play03:25

error pues se devuelve un error pero

play03:27

siempre va a devolver algo lo único que

play03:29

pues qué va a pasar ese tiempo acceder a

play03:32

sincronía que caracteriza a javascript

play03:35

entonces cómo hacemos esto sin lugar de

play03:38

devolver directamente el set time out

play03:40

esto devolvemos un objeto

play03:44

promise

play03:47

y éste promise recibe como argumentos 22

play03:52

funciones una vez reason y otra es reyes

play03:57

y entonces ahora hacemos el set time out

play04:02

y en lugar de devolver el return datos

play04:07

directamente no hacemos un retardo sino

play04:10

que llamamos al reason y le pasamos los

play04:13

datos

play04:17

y si hubiera cualquier error pues lo

play04:20

devolveremos con rayet imaginemos qué

play04:27

pero en este caso no hace falta entonces

play04:29

borramos esto

play04:32

y ahora cómo se llama esta función si

play04:34

usamos con sólo 10 datos no nos va a

play04:36

funcionar nos va a devolver un objeto de

play04:38

tipo promise recuerda que estamos

play04:40

devolviendo eso un return new promise

play04:42

pero esto habrá alguna manera como se

play04:45

accede a este reason pues muy fácil lo

play04:47

que hay que hacer es de hecho no sería

play04:50

así sino que llamaríamos a que datos y

play04:54

cuando se resuelva con dent tendremos

play04:57

hay una función de callback entonces en

play04:59

dem tendremos el primer argumento que

play05:02

escribe la función de cuál va ser a lo

play05:03

que devuelva ese reason en este caso los

play05:06

datos aquí lo puede llamar como quieras

play05:07

los vamos a llamar datos de nuevo y aquí

play05:10

ya tendrías acceso a ese objeto o wise a

play05:15

esos datos que recibas entonces aquí ya

play05:17

sí que lo podríamos imprimir con zoom

play05:20

lab como son los datos y se hará

play05:23

ejecutamos vamos a ver qué pasa ese

play05:25

segundo y medio e inmediatamente se

play05:28

muestra el contenido de los datos

play05:31

esto una forma más elegante de hacerlo

play05:34

de esta manera porque bueno podemos

play05:36

concatenar promesas podemos hacer si

play05:38

ésta

play05:40

esta función de volver a otra nueva

play05:43

promesa pues la podríamos ejecutar o

play05:45

resolver aquí después de seguido

play05:50

y luego al final si hubiera algún error

play05:51

se recoge con el cat y ahí iría el error

play05:54

y pues lo que hubiera que lo que

play05:57

quisieras hacer con ese error de mostrar

play05:59

por pantalla mandar un log lo que sea

play06:01

entonces estás como hasta ahora se han

play06:05

utilizado las promesas con el punto de

play06:08

en el punto catch

play06:10

ahora tenemos el as inca wait que es una

play06:12

manera de escribir esto pero en lugar de

play06:15

con punto d sería una forma más síncrona

play06:19

a la hora de escribir lo más secuencial

play06:22

pero por debajo sigue siendo asíncrono

play06:25

sigue habiendo promesas como se haría

play06:27

esto pues lo voy a dejar aquí comentado

play06:30

para verlo

play06:33

pero ahora lo que haríamos es cuando

play06:35

llamemos a que datos podemos utilizar la

play06:38

palabra reservada a weight 10 datos

play06:42

y pues el resultado de esa weight lo

play06:44

podemos guardar en cualquier variable o

play06:46

lo que sea entonces podemos tener aquí

play06:48

con sus datos igual a weight de datos

play06:50

aquí si te das cuenta arriba podríamos

play06:54

acceder a los datos que devolvía a la

play06:55

promesa después de ejecutar el ley y en

play06:59

venden tendríamos una función de

play07:00

callback que es esta de aquí que he

play07:01

puesto como una función y ahí tendríamos

play07:03

acceso a los datos y ya podríamos hacer

play07:05

lo que fuera imprimirlos y hacer una

play07:08

transformación lo que sea y de esta

play07:11

manera queda más digamos secuencial no

play07:13

tenemos aquí la variable datos entonces

play07:15

a continuación podríamos imprimirlos

play07:18

como hemos hecho antes ya es como de

play07:22

hecho se puede es más legible aquí

play07:24

decimos que tenemos datos espera a tener

play07:27

esos datos cuando ya lo tengamos pues

play07:29

listo seguimos lo único que esto sí lo

play07:32

ejecutamos

play07:33

va a dar un error porque bueno da otro

play07:37

error porque datos ya lo tenía por aquí

play07:39

me parece datos está aquí vale entonces

play07:43

vamos a poner aquí datos fecha

play07:48

i

play07:50

y nos da un error de que a weight sólo

play07:52

es válido dentro de una función

play07:54

asíncrona esto qué significa pues que

play07:57

tenemos que envolver todo esto dentro de

play07:59

otra función es la pega que tiene pero

play08:01

es fácil ponemos función

play08:04

pachín pachín data por ejemplo como la

play08:07

quieras llamar

play08:09

puede ser una función así hago una re

play08:11

función como tú quieras y esto iría

play08:13

adentro

play08:15

[Música]

play08:18

y lo único es que tienes que poner la

play08:20

palabra reservada a sinc antes de la

play08:23

función para que a weight pueda ser

play08:25

usado entonces luego ya lo único que

play08:27

tienes que hacer es llamar a fecha in

play08:28

that a que es esta función que hemos

play08:31

creado aquí

play08:35

y ahora si corremos pasa el segundo y

play08:38

medio y tenemos los datos para hacerlo

play08:42

más elegante bueno igual que con el

play08:45

punto de entendemos el punto cat

play08:47

podemos envolver esto dentro de una

play08:49

bloque try cats

play08:55

para que digamos intenta hacer esto

play09:00

[Música]

play09:02

y en el caso de que hubiera algún error

play09:03

pues bueno pues nos nos muestras el

play09:06

error no

play09:08

ahora no va a dar el error porque no

play09:11

tenemos nada que de error vamos a

play09:12

probarlo de nuevo

play09:15

veis no de error pero vamos a forzar ese

play09:17

error vamos a imaginar que pues esto por

play09:20

lo que sea devuelve un error aquí aquí

play09:24

dentro de este bloque vamos a hacer aquí

play09:25

un ir y vamos a decir sí datos punto ley

play09:33

es

play09:36

igual a cero

play09:38

quiere decir que no hay no hay datos en

play09:40

este a raíz de aquí arriba pues devuelve

play09:43

un error con rayet new error y le vamos

play09:48

a llamar no existen datos y si no pues

play09:55

continúa entonces ahí el time out y hace

play09:56

el recall vamos a probarlo de momento no

play09:58

va de error porque tenemos datos con 33

play10:03

objetos entonces no debería devolver

play10:05

error vamos a probarlo esperamos ese

play10:07

segundo y medio y ahí lo tenemos y ahora

play10:09

imaginemos que pues datos lo voy a

play10:11

comentar

play10:14

y ahora datos es un array vacío no hay

play10:17

no hay nada

play10:19

entonces si hago run obtenemos el objeto

play10:23

error

play10:24

porque él ha dicho que imprima

play10:26

directamente el error pero si le decimos

play10:28

que imprima el error message

play10:32

nos devuelve el error que hemos activado

play10:35

aquí bueno espero que te haya gustado

play10:37

que te haya aclarado las dudas acerca de

play10:39

todo el tema de la sincronía con

play10:42

promesas de asinca wave javascript para

play10:45

que veas bueno en resumen asinca weight

play10:47

y las promesas son para que son

play10:49

exactamente lo mismo lo único que es una

play10:52

forma de escribirlo u otra las dos son

play10:54

perfectamente válidas las dos ya son

play10:56

compatibles en prácticamente todos los

play10:58

navegadores entonces se deja a

play11:01

discreción de cada uno

play11:03

utilizar la que mejor convenga

play11:06

normalmente la cinca ways es más limpio

play11:08

de escribir y más legible pero sí que es

play11:12

verdad que en ocasiones puede ser más

play11:14

sencillo utilizar concatenar puntos de

play11:17

en punto cats dependiendo bueno pues del

play11:20

proyecto y de la función o el bloque de

play11:23

código que en ese momento estés

play11:24

ejecutando y nada más de nuevo espero

play11:27

que te haya gustado si es así no olvides

play11:28

darle al like suscribirte al canal si

play11:30

todavía no lo has hecho deja un

play11:31

comentario con tus dudas e impresiones

play11:35

y nada más nos vemos en un próximo vídeo

play11:37

chao

play11:40

[Música]

Rate This

5.0 / 5 (0 votes)

Related Tags
Sincronía JavaScriptPromesasAsync/AwaitProgramaciónCarlos AzaústreTécnicas de CódigoDesarrollo WebEducativoAprende JSWeb DevelopmentProgramación Async
Do you need a summary in English?