CursosEmpresasBlogLiveConfPrecios

Fetch

Clase 13 de 26 • Curso de Asincronismo con JavaScript

Clase anteriorSiguiente clase

Contenido del curso

Introducción
  • 1
    Lo que aprenderás en este curso

    Lo que aprenderás en este curso

    01:34
  • 2
    Qué es el asincronismo

    Qué es el asincronismo

    09:25
  • 3
    Event Loop

    Event Loop

    11:13
  • 4
    Iniciando a programar con JavaScript

    Iniciando a programar con JavaScript

    02:59
Callbacks
  • 5
    Configuración

    Configuración

    10:23
  • 6
    Qué son los Callbacks

    Qué son los Callbacks

    14:56
  • 7

    Playground: Ejecuta un callback con 2s de demora

    00:00
  • 8
    XMLHTTPRequest

    XMLHTTPRequest

    15:03
  • 9
    Fetch data

    Fetch data

    17:44
  • 10
    Callback hell

    Callback hell

    06:56
Promesas
  • 11
    Qué son las promesas

    Qué son las promesas

    11:54
  • 12

    Playground: Crea una función de delay que soporte asincronismo

    00:00
  • 13
    Fetch

    Fetch

    16:12
  • 14
    Fetch POST

    Fetch POST

    14:55
Async Await
  • 15
    Funciones asíncronas

    Funciones asíncronas

    10:07
  • 16
    Try and catch

    Try and catch

    11:51
  • 17

    Playground: Captura el error de una petición

    00:00
  • 18
    ¿Cómo enfrentar los errores?

    ¿Cómo enfrentar los errores?

    03:42
Generadores
  • 19
    Generators

    Generators

    08:06
Proyecto CV
  • 20
    Proyecto del curso

    Proyecto del curso

    11:48
  • 21
    Consumiendo API

    Consumiendo API

    19:24
  • 22
    Desplegando el proyecto

    Desplegando el proyecto

    16:45
  • 23

    Playground: Crea una utilidad para hacer peticiones

    00:00
Nunca pares de crear
  • 24
    Conclusión

    Conclusión

    03:09
  • 25
    ¿Qué camino tomar para seguir aprendiendo?

    ¿Qué camino tomar para seguir aprendiendo?

    04:12
  • 26

    Autoevaluación de Proyecto: Creación de Landing Page

    00:44

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
      Maria Gabriela Rodriguez Cuevas

      Maria Gabriela Rodriguez Cuevas

      student•
      hace 3 años
        Raúl Romero Sánchez

        Raúl Romero Sánchez

        student•
        hace 3 años
        Emerson David Cabrera Salas

        Emerson David Cabrera Salas

        student•
        hace 3 años
      Alejandro Sebastian Dubon Estrada

      Alejandro Sebastian Dubon Estrada

      student•
      hace 3 años
        Juan David Reyes

        Juan David Reyes

        student•
        hace 3 años
        Federico Ivan Llano

        Federico Ivan Llano

        student•
        hace 3 años
      Marco Palacios Orihuela

      Marco Palacios Orihuela

      student•
      hace 3 años
        Lucas Aristizábal

        Lucas Aristizábal

        student•
        hace 3 años
        Catriel Perez

        Catriel Perez

        student•
        hace 3 años
      Juan Ramirez

      Juan Ramirez

      student•
      hace 3 años
      Nicolás Leal

      Nicolás Leal

      student•
      hace 3 años
        Brandon Vizcarra

        Brandon Vizcarra

        student•
        hace 3 años
        Nicolás Leal

        Nicolás Leal

        student•
        hace 3 años
      Cesar Cordova Contreras

      Cesar Cordova Contreras

      student•
      hace 3 años
        Jonathan Jesús Martínez Rodríguez

        Jonathan Jesús Martínez Rodríguez

        student•
        hace 3 años
        German Medina

        German Medina

        student•
        hace 3 años
      Max Andy Diaz Neyra

      Max Andy Diaz Neyra

      student•
      hace 3 años
      Yefreilee Danny Samuel Parra

      Yefreilee Danny Samuel Parra

      student•
      hace 3 años
        Julian Ward

        Julian Ward

        student•
        hace 3 años
      Gutierrez Diego

      Gutierrez Diego

      student•
      hace 3 años
        Agustin Javier Alvarez Yudica

        Agustin Javier Alvarez Yudica

        student•
        hace 3 años
      Paul Martin Vargas Portugal

      Paul Martin Vargas Portugal

      student•
      hace 3 años
      Miguel Enrique Velásquez Millán

      Miguel Enrique Velásquez Millán

      student•
      hace 3 años
        Emmanuel Ovares

        Emmanuel Ovares

        student•
        hace 3 años
        Alejandra Sarahí Monroy Vélazquez

        Alejandra Sarahí Monroy Vélazquez

        student•
        hace 3 años
      David Jurado Benito

      David Jurado Benito

      student•
      hace 3 años
        Esteban Chica

        Esteban Chica

        student•
        hace 3 años
      Diego Gabriel Marquez

      Diego Gabriel Marquez

      student•
      hace 3 años
        John Fernando Monroy Baracaldo

        John Fernando Monroy Baracaldo

        student•
        hace 3 años
        Deniss Bonilla Paredes

        Deniss Bonilla Paredes

        student•
        hace 3 años
      Ricardo Ayala Montes

      Ricardo Ayala Montes

      student•
      hace 3 años
      Ricardo Zamudio Carbajal

      Ricardo Zamudio Carbajal

      student•
      hace 3 años
        Miguel Enrique Velásquez Millán

        Miguel Enrique Velásquez Millán

        student•
        hace 3 años
        Jonathan Forero

        Jonathan Forero

        student•
        hace 3 años
      John Byron Alzate Hernández

      John Byron Alzate Hernández

      student•
      hace 3 años
      Cristian Marchese

      Cristian Marchese

      student•
      hace 3 años
      Felix Torres Javier Antonio

      Felix Torres Javier Antonio

      student•
      hace 3 años
      Woldev S.A.S

      Woldev S.A.S

      student•
      hace 3 años
      Jorge Enríquez

      Jorge Enríquez

      student•
      hace 3 años

      💾 𝗖𝗹𝗮𝘀𝗲 #𝟭𝟭: 𝗙𝗲𝘁𝗰𝗵𝟭𝟭/𝟮𝟭 💾 . Por medio de ++Fetch++ se puede realizar peticiones HTTP asíncronas de JavaScript (JS) con promesas. La API Fetch proporciona una interfaz JS más cómoda para acceder y manipular; fetch() es un método global. . 🛠️ Para poder usar fetch, primero tenemos que instalarlo: .

      • Ir a la terminal e instalar fetch con: npm i node-fetch
      • Para poder compilar desde VSC, debemos registrar el modulo en package.json, abrimos el archivo y al final se agrega:
      "type": "module"
      • Importante agregar una coma (,) a la llave que cierra a “dependencies”.
      • En la ruta src/promise crear el archivo ++challenge.js++
      • En el archivo challenge.js inicialmente se debe importar lo que acabamos de instalar, agregando el código: import fetch from 'node-fetch';
      • Dado que la API es una constante, nunca va a cambiar, por convección se coloca en letras mayúsculas: const API = 'https://api.escuelajs.co/api/v1';
      • Ahora se crea la lógica con fetch, then y catch:
      import fetch from 'node-fetch'; const API = 'https://api.escuelajs.co/api/v1'; //función que va a recibir como argumento la url que queremos llamar y esto retornará el llamado de fecth: una promesa function fetchData(urlApi){ return fetch(urlApi); }; //el llamado fetchData(`${API}/products`) .then(response => response.json()) .then(products => { console.log(products); }) .then(() => { console.log('hola'); }) //se pueden anidar múltiples .then .catch(error => console.log(error));
      • Para correrlo dentro de la consola de VSC, se selecciona el código, se da click derecho y se le da a Run Code. En la salida (OUTPUT) si no arroja error, sale una lista larga de elementos del llamado a la API. .

      Continuando con la clase, para compilar el segundo ejemplo debemos comentar fetchData() para evitar problemas de compilación. . 🖊️ ++¿Cómo comentar en JavaScript?++ . En JS se comenta cada línea con doble slash // o se puede comentar todo un párrafo iniciando con slash + asterisco /* y finalizar con asterisco + slash */ . Pero para ahorrar tiempo se puede usar los shortcuts de VSC, se pueden ver y editar en File>Preferences>Keyboard Shortcuts o pulsando las teclas Ctrl + K Ctrl + S: .

      • Para comentar con shortcut, seleccionar el texto que se quiere comentar y presionar las teclas Ctrl + K luego las sueltas y presionas las teclas Ctrl + C
      • Para quitar los comentarios con shortcut, seleccionas el texto comentado, presionar las teclas Ctrl + K luego las sueltas y presionas las teclas Ctrl + U .

      ✏️ El código del segundo ejemplo queda:

      fetchData(`${API}/products`) .then(response => response.json()) //se hace la conversión a un objeto json .then(products => { console.log(products); return fetchData(`${API}/products/${products[0].id}`) // solo se quiere mostrar el primer elemento de la primera solicitud }) .then(response => response.json()) //se vuelve traer la data .then(product => { console.log(products.title); return fetchData(`${API}/categories/${product.category.id}`) //se quiere mostrar la categoria de un producto en particular }) .then(response => response.json()) .then(category => { console.log(category.name); }) .catch(err => console.log(err)) //detectar un error .finally(() => console.log('Finally')); //es opcional para mostrar que se terminó la solicitud

      .

      • Al correrlo con Run Code, la salida muestra una lista larga con la última palabra impresa Finally.

      En lo personal me sirven de mucho estos apuntes, gracias!!

      Tuviste un typo en el then del segundo llamado: en lugar de products, debe ir product (sin la "s"). De resto, genial tu aporte, como siempre. Gracias.

      .then(product => { console.log(products.title); return fetchData(`${API}/categories/${product.category.id}`)

      Desde la versión 18 de Node.js se puede utilizar fetch de manera nativa.

      Se me hizo raro instalarlo por que ya hacia rato lo usaba sin instalar nada XD, gracias bro

      Eso estaba pensando y me parecia raro

      Me pareció más fácil usar las promises que las callbacks, pero la pregunta es cuando uso uno y cuando uso el otro. 🤔

      los callbacks es una forma viejita, para ser mas entendible el código, tú decides cuál eliges si callbacks o promises. los callbacks se pueden cuando solo vas a hacer máximo 3 llamados a una API, sino a eso le llamaríamos callback hell. las promesas vinieron para eso, para evitar el callback hell y hacer más llamadas a una API y hacer nuestro código mas simple.

      Todas son herramientas con sus pros y contras. pero creo que si necesitas enlazar pocas funciones te sirven los callback. para pedidos a una API ya hay herramientas mas modernas que lo hacen mas "aburrido" ;)

      ⭐ Fetch:

      Nos permite realizar peticiones HTTP asíncronas utilizando promesas y de forma que el código sea un poco más sencillo y menos verboso.

      Básicamente llamamos a Fetch y le pasamos como parámetro la URL de la petición.

      const request = fetch(API);

      Fetch devolvera una promesa, la cual le podremos aplicar los métodos then y catch

      fetch(API) .then(res => res.json()) .then(data => console.log(data)) .catch(err => console.log(err));

      Se pueden anidar multiples then para hacer lógicas consecuentes.

      Todo es color de rosa cunado comprendes todo maldita sea😄!!

      .

      Aunque tengo una duda,

      • Como podria usar este tipo de conocimiento en mi proyecto?
      • Osea para que sirve todo esto?
      • En que lo uso, por ejemplo en mi web page que lo hara ver mas chido?

      Literalmente puedes hacer fetch de la data de cualquier API (siempre y cuando tengas autorización) para mostrar la info en tu página web Ejemplo: Puedes hacer fetch de la data de una API de clima y mostrarlo en tu pagina como valor agregado

      ohh okay gracias Brandon.

      En las notas de un compañero del curso pasado comentó sobre una librería llamada axios que nos ayudaba a hacer las peticiones de una manera más sencilla me anime a intentarlo a hacer el codigo con esa librería y el resultado fue este se redujo mucho el codigo :

      import axios from 'axios'; const API = 'https://api.escuelajs.co/api/v1'; axios.get(`${API}/products`) .then((products) => { console.log(products.data[0]); return axios.get(`${API}/products/${products.data[0].id}`); }) .then((product) => { console.log(product.data.title); console.log(product.data.price); return axios.get(`${API}/categories/${product.data.category.id}`); }) .then((category) => console.log(category.data.name)) .catch((err) => console.error(err));

      por si a alguien le interesa solo utiliza npm i axios y listo ya lo puedes utilizar aquí dejo documentacion recuerden que antes de correr tenemos que caminar para utilizar estos frameworks y saber que esta pasando tenemos que estudiar muy bien las bases para dominar estas ayudas.

      Excelente ejemplo de uso con axios. Me ha servido mucho, es más comprensible y limpio el código. Muy buen aporte!

      Pregunta un poco estúpida capas. Pero como se llegan a estas APIs?

      Aqui les traigo una forma de escribir la funcion fetchData para no tener que escribir en cada peticion la conversion a formato json

      import fetch from "node-fetch"; const API = 'https://api.escuelajs.co/api/v1'; //función que va a recibir como argumento la url que queremos llamar y esto retornará el llamado de fecth: una promesa function fetchData(urlApi){ return fetch(urlApi).then(response => response.json()); }; fetchData(`${API}/products`) .then(products =>{ console.log(products[0]); return fetchData(`${API}/products/${products[0].id}`) }) .then(product=>{ console.info(product.title) return fetchData(`${API}/categories/${product?.category?.id}`) }) .then(category=>{ console.info(category.name) }) .catch(err=>{ console.error(err)})

      Para el que todavía no lo sepa, para comentar todo lo seleccionado en VSC, solo tienes que seleccionar lo que quieres comentar, y luego pulsar CTRL+K, seguido de CTRL+C, espero les sirva, saludos!

      Para "descomentarlo" ctrl + U

      Quiero darle la duda al profesor en cuanto a su forma de llevar el curso, para muchos de seguro es mucho más fácil de entender y obviamente no es solo quedarse con este curso, pero creo que sería mucho más fácil para a quellos que se nos dificulta, que hiciera un ejemplo real, es decir, tiene una web x ( y que podamos verla) y va a traer de la API x productos y la va a mostrar en dicha web pero que sea visible lo que está trayendo. Monse si me explico! Llevo todo el curso tratando de entender y me cuesta.

      Compañero, a mi tambien se me dificultó al principio. Pero al final del curso aplicamos de manera practica los conceptos vistos. Paciencia!

      import fetch from "node-fetch"; const API = 'https://api.escuelajs.co/api/v1'; function fetchData(urlApi){ return fetch(urlApi); }; /*fetchData (`${API}/products`) .then(response => response.json()) .then(products => { console.log(products); }) .catch(error => console.log(error))*/ fetchData(`${API}/products`) .then(response => response.json()) .then(products=> { console.log(products); return fetchData (`${API}/products/${products[0].id}`) }) .then(response => response.json()) .then(product => { console.log(product.title) return fetchData (`${API}/categories/${product.category.id}`) }) .then(response => response.json()) .then(category => { console.log(category.name); }) .catch(err => console.log(err)) .finally (()=> console.log('Finally'))

      ¿En vez de crear una función ++fetchData++ no podríamos usar directamente el ++fetch++ que importamos de node-fetch? 🤔. · O sea, en vez de hacer:

      function fetchData(urlApi){ return fetch(urlApi) } fetchData(`${API}/products`)

      · ¿No podríamos hacer directamente?

      fetch(`${API}/products`)

      Justamente eso me estaba preguntando. No encuentro la utilidad de llamar a fetch por medio de una función.

      Concuerdo con ustedes compañeros, tampoco le veo una finalidad, pero pongo mi comentario por si alguien del Team Platzi nos soluciona esta duda :)

      Vengo haciendo toda la ruta sin ningún problema y este curso deja mucho que desear. No explica la mitad de los conceptos que utiliza. Muy mal...

      Terrible curso la verdad. Debemos entenderlo pero me he tenido que apoyar en videos de youtube en casa clase, y he aprendido más de los cometnarios de la comunidad que de las clases en si.

      Me dice el siguiente error al ejecutar el codigo, ya instale el node-fetch

      /home/diego/Javascript/4. Asincronismo/src/promise/tempCodeRunnerFile.js:1 import fetch from 'node-fetch'; ^^^^^

      Hola a mi me paso lo mismo y en mi caso era la version de Node la actualice a la v16.15.1 la version estable. 😁🖖🏻

      hola @johnfmonroybpro ¿cómo le hiciste para actualizar la versión de Node? ¿desinstalaste tu versión de Node.js que ya tenías? Yo estoy en Windows 10 y eso WSL 20.04

      Si no estas muy familiarizado con arrow function ve el primer then

      fetchData(`${API}/products`) .then(function (response) { console.log("ejemplo de más validaciones"); return response.json(); // regresa el primer llamado }) .then((products) => { //console.log(products); return fetchData(`${API}/products/${products[0].id}`); // se lanza el fetch para solicitar solo un producto }) .then((response) => response.json()) //respuesta del segundo llamado .then((product) => { console.log(product); //trae el poducto return fetchData(`${API}/categoriess/${product.category.id}`); // se lanza el fetch para obtene el id de la categoria del unico producto }) .then((response) => response.json()) // respuesta del tercer llamado .then((category) => { console.log(category); //trae la categoria console.log(category.name); // imprime la categoria del producto }) .catch((error) => console.error("Error " + error)) // si existe error .finally(() => console.log("Finally")); // finally

      Tengo una pregunta comunidad, gracias!

      ¿Son equivalentes las dos expresiones siguientes?

      .then(response => response.json())
      .then((response) => { response.json() })

      Si no estoy mal, sip, son equivalentes. · De todas formas siempre puedes confirmarlo intentando ejecutar el código visto en la clase cambiando una expresión por la otra y ver si todo sigue funcionando correctamente, je je. Pero en teoría, sí, son equivalentes.

      En tu segundo segmento de código sería necesaria la palabra reservada return.

      .then(response => response.json())
      .then((response) => { return response.json(); })

      Recuerden que para ahorrarse el paso del package.json, pueden simplemente renombrar el archivo como Challenge.mjs

      de esa forma la m transformará el archivo js en módulo.

      Hasta el minuto 6 estaba totalmente perdido. Podría haber arrancado diciendo que fetch ya es una promesa por defecto, y así poder ir siguiendo mejor el video.

      Les dejo el link de la API, lo escribí mal dos veces

      import fetch from 'node-fetch'; const API = 'https://api.escuelajs.co/api/v1';

      En lugar de añadir tu módulo a tu package.json, puedes simplemente cambiar el formato de tu archivo .js por .msj y ya el intérprete de JavaScript lo tratará como un módulo.

      Colbal Hell