Introducci贸n a JavaScript

1

驴Por qu茅 aprender JavaScript?

2

隆Hola Mundo! en Mac

3

隆Hola Mundo! en Windows

4

Anatom铆a de una variable

5

Tipos de datos en JavaScript

6

Creaci贸n de strings

7

Operadores aritm茅ticos

8

Conversi贸n de tipos: Type Casting y Coerci贸n

9

Conversi贸n de tipos expl铆cita e impl铆cita

Estructuras de Control y L贸gica

10

Operadores de comparaci贸n

11

Operadores l贸gicos

12

Ejecuci贸n condicional: if

13

Ejercicio: Adivina el n煤mero

14

Ejecuci贸n condicional: switch

15

Loop: for

16

Loop: for of

17

Loop: for in

18

Loop: while

19

Loop: do while

Funciones y This

20

Anatom铆a de una funci贸n

21

Funciones vs M茅todos

22

Funciones puras e impuras

23

Arrow function y enlace l茅xico

24

Contextos de ejecuci贸n y scope chain

25

驴Qu茅 es Closure?

26

Preguntas a Desarrolladores Senior: 驴Por qu茅 aprender Desarrollo Web?

Manipulaci贸n de Arrays

27

Introducci贸n a Arrays

28

Mutabilidad e inmutabilidad de Arrays

29

Modificaci贸n b谩sica del final con push( ), pop( )

30

Iteraci贸n con map( ) y forEach( )

31

Filtrado y reducci贸n con filter( ) y reduce( )

32

B煤squeda de elementos con find( ) y findIndex( )

33

Crear copias con slice( )

34

Spread operator: casos de uso

Programaci贸n Orientada a Objetos

35

Anatom铆a de un Objeto

36

Trabajando con objetos en JavaScript

37

Funci贸n constructora

38

驴Qu茅 es una clase?

39

Prototipos y herencias

40

Herencia en la pr谩ctica

41

Prototipos en la pr谩ctica

42

this en JavaScript

43

Proyecto: Crea una red social

44

Proyecto: Crea una red social parte 2

Asincron铆a en JavaScript

45

驴C贸mo funciona el JavaScript Engine?

46

Promesas en JavaScript

47

Usando Async y await en JavaScript

48

For await of

49

驴C贸mo funciona la web?

50

驴C贸mo funciona HTTP?

51

M茅todo GET en JavaScript

52

M茅todo POST en JavaScript

53

M茅todo DELETE en JavaScript

54

Importancia del id en el m茅todo DELETE

55

ECMAScript 6 y tus siguientes pasos

You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesi贸n a prueba de IA

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

0 D铆as
22 Hrs
41 Min
33 Seg

For await of

48/55
Resources

How to make multiple HTTP requests efficiently in JavaScript?

Have you ever faced the need to make multiple HTTP requests in a web development project? This is a common challenge, especially when interacting with multiple APIs at the same time. The most efficient solution is to use the for await...of loop, combining async and await to execute promises asynchronously. This not only makes the code cleaner, but also improves performance and user experience by not blocking the loading of other elements in the application.

What is for await...of and how does it work?

The for await...of is a powerful tool in JavaScript. It is a loop that allows us to iterate over asynchronous objects, such as promises, so that we can wait for each one to resolve before proceeding to the next one. The syntax is intuitive and adapts well when you need to work with multiple HTTP requests.

For example, let's say you have an array of URLs from an API, such as Rick and Morty. You can iterate over each URL and perform an asynchronous fetch request as follows:

async function fetchNewData() { const URLs = [ 'url1', // Replace with real URLs 'url2', 'url3' ];
 try { for await (let URL of URLs) { let response = await fetch(URL); let data = await response.json(); console.log(data); } } } catch (error) { console.error('Error:', error); } }}
 fetchNewData();

How to structure the code to handle errors?

Error handling is critical when working with asynchronous requests. Using try...catch blocks is the recommended way to catch and handle errors, such as network request failures. This ensures that your application does not fail completely if one of the requests fails and you can react appropriately, for example, by displaying an error message to the user.

Within the for await loop, the try block is responsible for performing the fetch and converting the response to JSON format. If any of these operations fail, control is passed to the catch block, where we can handle the error in an elegant way.

What are the benefits of using for await...of in real projects?

  • Non-blocking performance: Executing requests asynchronously allows the browser to continue processing other UI elements, improving the experience.
  • Cleaner and more manageable code: By using async/await, your code becomes more readable and easier to maintain compared to traditional promises or callbacks.
  • Scalability: You can easily adapt this approach to handle more URLs or add additional logic to process each response.

Implementing these techniques in your projects not only optimizes their performance, but also provides a robust foundation for handling complex scenarios where multiple data elements must be loaded and processed simultaneously. So, go ahead and apply for await...of in your future developments and experience the improved efficiency and fluidity of your applications!

Contributions 14

Questions 3

Sort by:

Want to see more contributions, questions and answers from the community?

`for await...of` es una estructura de control en JavaScript utilizada para iterar sobre objetos iterables as铆ncronos. Permite procesar elementos de forma secuencial, esperando la resoluci贸n de cada elemento antes de pasar al siguiente. `for await...of` es una herramienta poderosa para trabajar con datos as铆ncronos en JavaScript. Permite iterar sobre elementos de forma secuencial, esperando la resoluci贸n de cada elemento antes de continuar, lo que simplifica el manejo de operaciones as铆ncronas en comparaci贸n con el uso de promesas y bucles tradicionales. **Diferencia con** `for...of`**:** Mientras que `for...of` se utiliza para iterar sobre objetos iterables s铆ncronos, `for await...of` est谩 dise帽ado espec铆ficamente para manejar iterables as铆ncronos.
Es aconsejable no usar `await` dentro de bucles innecesariamente, ya que esto puede bloquear el event loop. Si necesitas realizar m煤ltiples operaciones as铆ncronas dentro de un bucle, considera usar `Promise.all` o manejar las promesas en paralelo. // Evita esto: for (let url of urls) { let respuesta = await fetch(url); // procesar respuesta } // En su lugar: const promesas = urls.map(url => fetch(url).then(res => res.json())); const resultados = await Promise.all(promesas);
Tambien existe promese.all donde podemos manipular .then() y .catch() y se usa cuando: * Quieres manejar promesas en paralelo para mejorar el rendimiento. * Necesitas manejar errores espec铆ficos de cada promesa de manera individual. * Prefieres mantener el control sobre la l贸gica de flujo asincr贸nico y la concurrencia. ```javascript const urls = \['Ejemplo1', 'Ejemplo2', 'Ejemplo3' ]; Promise.all(urls.map(url => fetch(url).then(response => response.json()))) .then(results => { results.forEach(data => console.log(data)); }) .catch(error => console.error('Error:', error)); ```
**for await...of:** 1. *Prop贸sito*: Itera sobre promesas u objetos as铆ncronos iterables secuencialmente. 2. *Sintaxis*: for await (const valor of iterable) { ... } 3. *Ejecuci贸n*: Secuencial (espera a que cada promesa se resuelva antes de pasar a la siguiente). 4. *Resultado*: Procesa cada resultado individualmente en cada iteraci贸n. 5. *Manejo de errores*: Puede manejar errores individualmente para cada promesa. 6. *Orden*: Procesa las promesas en el orden especificado. 7. *Uso t铆pico*: Cuando necesitas procesar una serie de promesas en orden, posiblemente con l贸gica entre cada resoluci贸n. **Promise.all:** 1. *Prop贸sito*: Ejecuta m煤ltiples promesas en paralelo. 2. *Sintaxis*: Promise.all(\[promesa1, promesa2, ...]) 3. *Ejecuci贸n*: Paralela (todas las promesas se inician al mismo tiempo). 4. *Resultado*: Devuelve un array con los resultados de todas las promesas. 5. *Manejo de errores:* Si cualquier promesa es rechazada, Promise.all se rechaza inmediatamente. 6. *Orden*: Los resultados mantienen el orden de las promesas de entrada. 7. *Uso t铆pico*: Cuando necesitas realizar m煤ltiples operaciones as铆ncronas independientes y esperar a que todas se completen.
de nuevo el c贸digo comentado: ![](https://static.platzi.com/media/user_upload/image-f2762ddb-e3a5-4e52-af3f-50d3438da00b.jpg) const urls = \[ "https://rickandmortyapi.com/api/character", "https://rickandmortyapi.com/api/location", "https://rickandmortyapi.com/api/episode" ]; async function fetchNewData() { try { for await (let url of urls) { let response = await fetch(url); let data = await response.json(); console.log(data); } } catch (error) { console.log(error); } }
**RESUMEN:** ![](https://static.platzi.com/media/user_upload/image-58477891-38a2-45ec-8e2b-0e9b9880b9c5.jpg)
hola tengo un comportamiento inusual al correr esta funcion, no entiendo el porque me imprime el promise, pero no la data. ![](https://static.platzi.com/media/user_upload/image-01f8c62e-d811-4a9e-bba9-49736bf5cd05.jpg) este es el codigo que hasta donde entiendo no es diferente al de la clase: const urls=\["https://rickandmortyapi.com/api/character","https://rickandmortyapi.com/api/location","https://rickandmortyapi.com/api/episode"]; async function fetchAlot() { try{ for await (let url of urls){ let response= await fetch(url) let data= response.json() console.log("data:") console.log(data); } }catch(error){ console.log(error); } }
Comparto el c贸digo de la clase: ```js async function fetchData(){ try{ let response = await fetch("https://swapi.dev/api/people"); let data = await response.json(); // se convierte la respuesta a json, y json a data console.log(data); } catch(error){ console.log("Error: " + error); } } const urls = [ "https://swapi.dev/api/people", "https://swapi.dev/api/planets", "https://swapi.dev/api/starships", "https://swapi.dev/api/vehicles" ]; async function fetchNewData() { try{ for await (let url of urls){ let response = await fetch(url); let data = await response.json(); console.log(data); } }catch(error){ console.log("Error: " + error); } } fetchNewData(); ```
El uso de `for await...of` permite manejar m煤ltiples llamadas as铆ncronas de manera secuencial. Cada llamada a `await fetch(URL)` retornar谩 su resultado individualmente, y cada una se sumar谩 al call stack a medida que se complete. No se combinan en un solo callback, sino que cada resultado se maneja de forma independiente, permitiendo que el flujo del programa contin煤e mientras se esperan las respuestas. As铆, cada llamada se espera y procesa por separado.
Hasta este momento recuerden que ya hemos visto 3 conceptos... * Creaci贸n y manejo de promesas tradicionales con propiedades resolve, reject y m茅todos then() y catch() * Funci贸n as铆ncrona con Async y Await la cual en teor铆a deberiamos priorizar utilizar en lugar de una promesa tradicional debido a mejor legibilidad y estructura. * Manejo de un array en funci贸n as铆ncrona con for await of, quiero destacar que existe otra manera de manejar multiples promesas, y esta es: Promise.all() \--- Sobre Promise.all(), el c贸digo seria: ```js function ejecutarPromesasDeArray (array) { Promise.all(array.map(url => { fetch(url) .then(response => { response.json() console.log(response) console.log('Promesa finalizada') }) .catch(error => console.log(error)) })) } ```El c贸digo anterior ejecuta las promesas de un array pero a diferencia de for await of, Promise.all() ejecuta las promesas en paralelo, y for await of ejecuta de promesa en promesa, una por una. Por lo que es m谩s eficiente utilizar Promise.all() para tratar distintos url en un tema de tiempo, pero recuerda que depende de tu situaci贸n/proyecto ser谩 preferible usar un m茅todo o otro.
![](https://static.platzi.com/media/user_upload/image-71c0a9d9-d94d-4c63-bc6c-453ec6bfefa6.jpg) **Les tengo un reto** He creado mi propia API que devuelve un n煤mero aleatorio, el reto consiste en que practiquen, hagan fetch al siguiente url ``fetch(`https://api-random-number-miguezpz.onrender.com/randomNumber/${valorMinimo}/${valorMaximo}`)`` . La petici贸n devolver谩 un objeto {randomNumber: numero}, es necesario utilizar el m茅todo .json() con la respuesta. Deben usar async y await, usar los conocimientos que hemos aprendido hasta ahora, lo mejor es que intenten escribir el c贸digo con lo que recuerdan intentando revisar los ejemplos de la clase como guia o investigar la soluci贸n en internet lo menos posible. En ${valorMinimo} y ${valorMaximo} se asignan numeros, el numero aleatorio que obtendran ser谩 en el rango que ustedes elijan, por ejemplo: . ``fetch(`https://api-random-number-miguezpz.onrender.com/randomNumber/1/10`)`` . WARNING... Les dejo mi soluci贸n al reto: ![](https://static.platzi.com/media/user_upload/solucionReto-5e0b618b-d22d-440c-9722-d8bbf629d828.jpg) Como curiosidad, en una terminal linux pueden hacer curl al url y obtener el n煤mero aleatorio con: `curl `[`https://api-random-number-miguezpz.onrender.com/randomNumber/1/10`](https://api-random-number-miguezpz.onrender.com/randomNumber/1/10)
Mis notas: ![](https://static.platzi.com/media/user_upload/image-eaca1bd8-9457-4eec-bc8a-09846e8edeb5.jpg)
En este caso el 'for await of...' no es necesario aqu铆 porque estamos iterando sobre un array con strings. 'For await of' es usado para iterar sobre objetos asincr贸nicos. Entonces para que este bucle tenga sentido, el array deber铆a contener fetchs, de esta forma: ```js const promises = [ fetch("https://rickandmortyapi.com/api/character"), fetch("https://rickandmortyapi.com/api/location"), fetch("https://rickandmortyapi.com/api/episode"), ]; async function fetchData() { try { for await (let response of promises) { const data = await response.json(); console.log(data); } } catch (error) { console.log(error); } } fetchData(); ```
Que Grande este profe, En 4 clases te explica 4 cursos un genio realmente y muy claro 馃憦馃憦馃憦馃憦