<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Sol Cifuentes Corral - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Sol Cifuentes Corral - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 19 May 2026 20:02:10 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/sol/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Programación asíncrona en JavaScript: Guía para Principiantes ]]>
                </title>
                <description>
                    <![CDATA[ Para comprender lo que significa la programación asíncrona, te propongo que imagines a mucha gente trabajando en simultáneo en un mismo proyecto, cada cual en una tarea distinta. Con la programación tradicional (y sincrónica), cada persona debería esperar a que la persona anterior termine su tarea antes de comenzar la ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/programacion-asincrona-en-javascript-guia-para-principiantes/</link>
                <guid isPermaLink="false">63e69b889a3ea706f58b0e47</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Sol Cifuentes Corral ]]>
                </dc:creator>
                <pubDate>Mon, 17 Apr 2023 02:18:20 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/04/programacion-asincrona.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/asynchronous-programming-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Asynchronous Programming in JavaScript – Guide for Beginners</a>
      </p><p>Para comprender lo que significa la programación asíncrona, te propongo que imagines a mucha gente trabajando en simultáneo en un mismo proyecto, cada cual en una tarea distinta.</p><p>Con la programación tradicional (y sincrónica), cada persona debería esperar a que la persona anterior termine su tarea antes de comenzar la propia. </p><p>Con la programación asíncrona, por el contrario, cada uno puede comenzar su tarea y trabajar en paralelo sin tener que esperar a que las otras personas finalicen su trabajo. &nbsp;</p><p>De forma similar, en un programa informático, la programación asíncrona permite al programa trabajar en distintas tareas simultáneamente sin tener que esperar a completar una tarea para pasar a la siguiente. Esto permite que un programa sea capaz de hacer más cosas en menos tiempo. &nbsp;</p><p>Por ejemplo: un programa puede enviar una solicitud a un servidor mientras gestiona y procesa la información del usuario, todo al mismo tiempo. De esta forma, un programa puede ejecutarse de forma mucho más eficiente. </p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-321.png" class="kg-image" alt="image-321" width="600" height="400" loading="lazy"></figure><p>En este artículo, nos adentraremos en el mundo de la programación asíncrona en JavaScript, explorando las diversas técnicas y conceptos necesarios para utilizar este poderoso paradigma de programación. </p><p>Desde las callbacks a las promesas y las async/await, comprenderás cómo aprovechar la programación asíncrona en tus proyectos de JavaScript. </p><p>Entender la programación asíncrona es esencial para construir aplicaciones web de alto rendimiento, tanto si eres un desarrollador experimentado como si estás dando tus primeros pasos con JavaScript. &nbsp;Por ello, te invito a seguir leyendo para saber más sobre este concepto tan importante. </p><h2 id="-qu-es-la-programaci-n-sincr-nica"><strong>¿Qué es la Programación Sincrónica?</strong></h2><p>La programación sincrónica es una técnica que se utiliza para que las computadoras realicen tareas paso a paso, en el orden en que se les dan las instrucciones. </p><p>Imagina que estás cocinando la cena y tienes una lista de tareas, como hervir el agua para la pasta, freír el pollo y preparar una ensalada. <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-343.png" class="kg-image" alt="image-343" width="600" height="400" loading="lazy"></figure><p>¿Harías estas tareas una por una y esperarías a que cada una terminara antes de pasar a la siguiente?</p><p>La programación sincrónica funciona de manera similar: la computadora completará cada tarea antes de pasar a la siguiente. Esto hace que sea fácil de entender y de predecir lo que la computadora hará en cualquier momento dado. </p><p>Aquí un ejemplo de código sincrónico en JavaScript: </p><pre><code class="language-javascript">// Define tres funciones
function primeraTarea() {
  console.log("Tarea 1");
}

function segundaTarea() {
  console.log("Tarea 2");
}

function terceraTarea() {
console.log("Tarea 3");  
}

// Ejecuta las funciones
primeraTarea();
segundaTarea();
terceraTarea();</code></pre><p>Este código mostrará los siguientes mensajes en el orden en que aparecen: </p><pre><code>"Tarea 1"
"Tarea 2"
"Tarea 3"</code></pre><p>El código ejecutará las tareas en el orden en que las ves y esperará a que cada tarea se complete antes de pasar a la siguiente.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-244.png" class="kg-image" alt="image-244" width="600" height="400" loading="lazy"><figcaption>Diagrama que muestra el funcionamiento de la programación sincrónica.&nbsp;</figcaption></figure><p>Sin embargo, la programación sincrónica puede ser problemática en ciertas situaciones, especialmente cuando se trata de tareas que requieren una cantidad significativa de tiempo para completarse.</p><p>Por ejemplo, supongamos que un programa sincrónico realiza una tarea que requiere esperar una respuesta de un servidor remoto. El programa quedará a la espera de la respuesta y no podrá hacer nada más hasta que se devuelva la respuesta. Esto se conoce como <em>bloqueo</em> y puede hacer que una aplicación no responda o aparezca como "congelada" para el usuario.</p><p>Examinemos el siguiente código:</p><pre><code class="language-javascript">function funcionDeLargaDuracion() {
    let inicio = Date.now();
    while (Date.now() - inicio &lt; 5000) {
        // no hacer nada
    }
    return "Hola";
}

console.log('Iniciando...');

let resultado = funcionDeLargaDuracion();
console.log(resultado);

console.log('...Finalizando');

</code></pre><p>En este ejemplo:</p><ul><li>El programa comienza registrando <em>"Iniciando..."</em> en la consola. </li><li>Luego llama a la función &nbsp;<code>funcionDeLargaDuracion</code>, que simula una tarea que tarda 5 segundos en completarse. Esta función bloqueará la ejecución del resto del programa mientras se ejecuta. </li><li>Una vez que la función se complete, devolverá <em>"Hola"</em>, y el programa lo imprimirá en la consola. </li><li>Finalmente, el programa registrará <em>"Finalizando..."</em> en la consola. </li></ul><p>Durante los 5 segundos que la <code>funcionDeLargaDuracion()</code>se está ejecutando, el programa quedará bloqueado y no podrá ejecutar la siguiente línea de código. Esto puede hacer que el programa tarde mucho en completarse y la aplicación quede congelada y sin respuesta &nbsp;para el usuario. </p><p>Por el contrario, si el programa se ejecutara de manera asíncrona, este podría seguir ejecutando las instrucciones de la siguiente línea de código en lugar de bloquearse. Esto permitiría que el programa siga siendo receptivo y ejecute otras instrucciones de código mientras espera a que se complete el tiempo de espera.</p><h2 id="-qu-es-la-programaci-n-asincr-nica"><strong>¿Qué es la Programación Asincrónica?</strong></h2><p>La programación asíncrona es una forma en que un programa de computadora gestiona múltiples tareas simultáneamente en lugar de ejecutarlas una tras otra. </p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-336.png" class="kg-image" alt="image-336" width="600" height="400" loading="lazy"><figcaption>Diagram showing how asynchronous programming works.</figcaption></figure><p>La programación asíncrona permite que un programa continúe trabajando en otras tareas mientras espera que ocurran eventos externos, como solicitudes de red. Este enfoque puede mejorar enormemente el rendimiento y la capacidad de respuesta de un programa. </p><p>Por ejemplo, mientras un programa recupera los datos de un servidor remoto, puede seguir ejecutando otras tareas como responder a las entradas del usuario. </p><p>Aquí, un ejemplo de un programa asíncrono que utiliza el método <br> <code>setTimeout</code> :</p><pre><code class="language-javascript">console.log("Inicio del guión");

setTimeout(function() {
  console.log("Primer tiempo muerto completado");
}, 2000);

console.log("Fin del guión");
</code></pre><p>En este ejemplo, el método <code>setTimeout</code> ejecuta una función después de un tiempo especificado. La función que se le pasa a <code>setTimeout</code> se ejecutará de forma asíncrona, lo que significa que el programa seguirá ejecutando la siguiente línea de código sin esperar a que se complete el tiempo de espera. </p><p>Cuando se ejecuta el código, obtendrás lo siguiente:</p><pre><code>Inicio del guión
Fin del guión
Primer tiempo muerto completado</code></pre><p>Como puedes ver, &nbsp;<code>console.log("Primer tiempo muerto completado")</code>se ejecutará después de 2 segundos. Mientras tanto, el guion continúa ejecutando la siguiente línea de código sin causar ningún bloqueo o "congelamiento". </p><p>En JavaScript, la programación asíncrona se puede utilizar a través de distintas técnicas. Uno de los métodos más comunes es el uso de las <em>callbacks </em>o<em> retrollamadas.</em> </p><h2 id="-c-mo-utilizar-las-funciones-callback"><strong>¿Cómo utilizar las funciones Callback?</strong></h2><p>Imagina que quieres planear una fiesta de cumpleaños para tu hijo/a. Tienes que enviar las invitaciones, encargar una torta y planear los juegos. Pero también quieres contratar a un payaso para entretener a los invitados. Solo puedes hacer que el payaso venga a la fiesta una vez que se hayan realizado todos los demás preparativos y los invitados hayan llegado.<br></p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-341.png" class="kg-image" alt="image-341" width="600" height="400" loading="lazy"><figcaption>Ilustración de un payaso</figcaption></figure><p>Entonces, le dices al payaso que venga a la fiesta solo después de que le hayas notificado que los invitados han llegado. En este caso, el payaso representa una función <em>callback</em>, y la "llegada de los invitados" representa la función cuya ejecución se debe completar antes de que se pueda ejecutar la devolución de llamada.</p><p>En el código, una <em>callback</em> es una función que se pasa como argumento a otra función y se ejecuta después de que se haya completado la ejecución de la primera función. Se usa comúnmente en JavaScript para manejar operaciones asíncronas como obtener datos de un servidor, esperar el ingreso de datos por parte del usuario o manejar eventos.</p><p>Aquí, un ejemplo simple de cómo puede usar una función <em>callback</em> para manejar una operación asíncrona:</p><pre><code class="language-javascript">// Declarar función
function obtenerDatos(callback) {
  setTimeout(() =&gt; {
    const datos = {nombre: "John", edad: 30};
    callback(datos);
  }, 3000);
}

// Ejecutar función con una callback
obtenerDatos(function(datos) {
  console.log(datos);
});

console.log("Se están obteniendo los datos...");
</code></pre><p>En este ejemplo:</p><ul><li>Tenemos una función llamada &nbsp;<code>fetchData</code> que usa el método <code>setTimeout</code> para simular una operación asíncrona. La función recibe una <em>callback</em> como argumento. </li><li>La función <em>callback</em> recibe los datos recuperados por la función después de que se haya completado el tiempo de espera. </li></ul><p>El método <code>setTimeout</code> se usa para ejecutar la <em>callback</em> después de un tiempo especificado (en este caso, 3 segundos). La <em>callback</em> se ejecutará de forma asíncrona, lo que significa que el programa ejecutará la siguiente línea de código sin esperar a que se complete el tiempo de espera. </p><p>Cuando se ejecuta el código, el resultado será:</p><pre><code>Se están obteniendo los datos...
{nombre: "John", edad: 30}
</code></pre><p>Como se puede observar, el <code>console.log("Primer tiempo muerto completado")</code> se ejecutará después de 3 segundos. Mientras tanto, el guión continúa ejecutando la siguiente instrucción, <code>console.log("Se están obteniendo los datos...");</code>.</p><p>Este es el concepto principal de la programación asíncrona. El guión no espera a que se complete la operación asíncrona. Simplemente continúa ejecutando la siguiente instrucción.</p><h2 id="-qu-es-el-callback-hell-o-infierno-de-callbacks"><strong>¿Qué es el Callback Hell o infierno de Callbacks?</strong></h2><p>Los callbacks proveen una forma útil de manejar operaciones asíncronas. Sin embargo, cuando se anidan muchos callbacks, el código se vuelve complejo y difícil de leer y de entender.</p><p>Esto ocurre cuando se encadenan múltiples <em>callbacks</em> uno tras otro, creando una estructura piramidal de indentación a la que se le da el nombre de <em>callback hell</em> (o infierno de <em>callbacks). </em>También se le conoce como "Pirámide infernal" o <em>Pyramid of Doom</em>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-340.png" class="kg-image" alt="image-340" width="600" height="400" loading="lazy"></figure><p>Aquí, un ejemplo de <em>callback hell</em>:</p><pre><code class="language-javascript">obtenerDatos(function(a) {
  obtenerMasDatos(a, function(b) {
    obtenerAunMasDatos(b, function(c) {
      obtenerAunMasYMasDatos(c, function(d) {
        obtenerDatosFinales(d, function(datosFinales) {
          console.log(datosFinales);
        });
      });
    });
  });
});
</code></pre><p>En este ejemplo:</p><ol><li>La función <code>getData</code> recibe un <em>callback</em> como argumento y se ejecuta después de que se recopilen los datos.</li><li> El <em>callback</em> toma los datos y llama a la función <code>getMoreData</code>, que también recibe un callback como argumento, y así sucesivamente.</li></ol><p>Este anidamiento de <em>callbacks</em> puede hacer que el código sea difícil de mantener, y la indentación vuelve aún más difícil de ver la estructura general del código.</p><p>Para evitar los <em>callback hell</em>, se puede utilizar una forma más moderna de manejar las operaciones asíncronas : las promesas. Las promesas ofrecen una forma más elegante de manejar el flujo asíncrono de un programa en comparación con las funciones de callback. Este es el enfoque de la siguiente sección.</p><h2 id="-c-mo-funcionan-las-promesas"><strong>¿Cómo funcionan las promesas?</strong></h2><p>Una promesa representa una forma de manejar las operaciones asíncronas de una manera más organizada. Sirve para lo mismo que un callback, pero ofrece capacidades adicionales y tiene una sintaxis más legible.</p><p>Una promesa en JavaScript es un marcador de posición para un valor o acción futura. Al crear una promesa, se le está diciendo al motor de JavaScript que "prometa" realizar una acción específica y notificarte una vez que se haya completado o fallado.</p><p><br></p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-339.png" class="kg-image" alt="image-339" width="600" height="400" loading="lazy"><figcaption>Ilustración de una promesa y del motor JS.</figcaption></figure><p>Las funciones callback se adjuntan a las promesas para manejar el resultado de la acción. Estas callbacks serán llamadas cuando la promesa se cumpla (acción completada exitosamente) o cuando se rechace (acción fallida).</p><p>Como desarrollador/a de JavaScript, es probable que pases más tiempo consumiendo promesas devueltas por las API web asíncronas y gestionando sus resultados en lugar de crearlas tu mismo/a.</p><h3 id="-c-mo-crear-una-promesa"><strong>¿Cómo crear una Promesa?</strong></h3><p>Para crear una promesa, deberás crear una nueva instancia del objeto <code>Promise</code> llamando al constructor <code>Promise</code>. &nbsp;</p><p>El constructor toma un solo argumento: una función llamada <code>executor</code>. La función "executor" es llamada inmediatamente cuando se crea la promesa, y toma dos argumentos: una función de resolución (función <code>resolve</code>) y una función de rechazo (función <code>reject</code>).<br></p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-345.png" class="kg-image" alt="image-345" width="600" height="400" loading="lazy"><figcaption>Diagrama de la anatomía de una promesa.</figcaption></figure><p>Escribe la siguiente línea de código para declarar una promesa:</p><pre><code class="language-javascript">// Inicializar una promesa
const myPromise = new Promise(function(resolve, reject) =&gt; {})</code></pre><p>Ahora, inspeccionemos el objeto <code>myPromise</code> imprimiéndolo en la consola.</p><pre><code class="language-javascript">console.log(myPromise);</code></pre><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/promise-object.jpg" class="kg-image" alt="promise-object" width="600" height="400" loading="lazy"><figcaption>This image represents an output of inspecting the <code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">promise</code> object.&nbsp;</figcaption></figure><p>Como se puede ver, la promesa tiene un estado pendiente y un valor indefinido. Esto se debe a que aún no se ha realizado ninguna configuración para el objeto de la promesa, por lo que va a permanecer indefinidamente en un estado pendiente sin ningún valor o resultado.</p><p>Ahora, configuremos <code>myPromise</code> para resolver con una cadena impresa en la consola después de 2 segundos.</p><pre><code class="language-javascript">const myPromise = new Promise((resolve, reject) =&gt; {
    setTimeout(() =&gt; {
        resolve("¡Saludos desde la promesa!");
    }, 2000);
});</code></pre><p>Ahora, al inspeccionar el objeto <code>myPromise</code>, encontrarás que tiene un estado de "cumplida" y un valor que corresponderá a la cadena de caracteres que se le pasó a la función <code>resolve</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2023/01/myPromise-obj.jpg" class="kg-image" alt="myPromise-obj" width="600" height="400" loading="lazy"></figure><p>Una promesa tiene tres estados:</p><ul><li><strong><strong>Pendi</strong>ente<strong>:</strong></strong> es el estado inicial, ni cumplida ni rechazada.</li><li><strong>Cumplida<strong>:</strong></strong> significa que la operación se completó con éxito. </li><li><strong>Rechazada<strong>:</strong></strong> significa que la operación falló.</li></ul><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-347.png" class="kg-image" alt="image-347" width="600" height="400" loading="lazy"><figcaption>Pendiente, cumplida, y rechazada, los tres estados de una promesa.</figcaption></figure><p>Es importante tener en cuenta que se dice que una promesa está resuelta tanto si se completa con éxito como si se rechaza.</p><p>Ahora que has visto cómo se crean las promesas, veamos cómo se hace para consumirlas. </p><h3 id="-c-mo-consumir-una-promesa"><strong>¿Cómo consumir una Promesa?</strong></h3><p>Consumir una promesa involucra los siguientes pasos: </p><ol><li><strong>Obtener una referencia a una promesa<strong>:</strong></strong> Para consumir una promesa, primero necesitas obtener una referencia a ella. Basándonos en el código de la sección anterior, nuestra referencia a una promesa será el objeto <code>myPromise</code>.</li><li><strong>Adjuntar callbacks a una promesa<strong>:</strong></strong> Una vez que tienes una referencia, puedes adjuntar funciones de callback utilizando los métodos <code>.then</code> y <code>.catch</code>. El método <code>.then</code> se llama cuando una promesa se cumple y el método <code>.catch</code> se llama cuando una promesa se rechaza.</li><li><strong>Esperar a que la promesa se resuelva<strong>:</strong></strong> Una vez que has adjuntado los callbacks a la promesa, puedes esperar a que la promesa se cumpla o se rechace.</li></ol><p>Aquí, un ejemplo de cómo puedes consumir una promesa: </p><pre><code class="language-javascript">myPromise
    .then((resultado) =&gt; {
        console.log(resultado);
    })
    .catch((error) =&gt; {
        console.log(error);
    });
</code></pre><p>Una vez que se cumple la promesa, se llamará al método de callback <code>.then</code> con el valor resuelto. Si la promesa se rechaza, se llamará al método <code>.catch</code> &nbsp;con un mensaje de error. </p><p>También puedes agregar el método <code>.finally()</code> , que se llamará después de que una promesa se resuelva. Esto significa que <code>.finally()</code> &nbsp;se invocará independientemente del estado de una promesa (ya sea resuelta o rechazada).</p><pre><code class="language-javascript">myPromise
  .then((resultado) =&gt; {
    console.log(resultado);
  })
  .catch((error) =&gt; {
    console.log(error);
  })
  .finally(() =&gt; {
    //aquí va el código que será ejecutado independientemente de que la  	//promesa se cumpla o se rechace. 
  });</code></pre><h3 id="-c-mo-encadenar-promesas"><strong>¿Cómo encadenar Promesas?</strong></h3><p>El encadenamiento de promesas es un patrón que permite manejar operaciones asíncronas de una forma clara y fácil de entender. </p><p>El patrón implica conectar múltiples promesas en una secuencia, donde el resultado de una promesa se pasa como argumento a la siguiente promesa. </p><p>La vinculación de las promesas se realiza mediante el uso del método <code>then()</code>. Este método utiliza una función de callback como argumento y devuelve una nueva promesa. La nueva promesa se resuelve con el valor devuelto por la función de callback. </p><p>Un ejemplo de encadenamiento de promesas: </p><pre><code class="language-javascript">fetch('https://example.com/data')
    .then(response =&gt; response.json())
    .then(data =&gt; processData(data))
    .then(processedData =&gt; {
        //haz algo con la información procesada
    })
    .catch(error =&gt; console.log(error))
</code></pre><p>A partir del código anterior:</p><ul><li>La primera promesa, que es la función <code>fetch API</code>, está recuperando datos de un servidor. </li><li>La segunda promesa está analizando la respuesta como JSON.</li><li>La tercera promesa está procesando la información. </li><li>La cuarta promesa está realizando una acción con la información obtenida. </li><li>El método <code>.catch</code> al final de la cadena manejará cualquier error que ocurra en cualquiera de las promesas anteriores. </li></ul><p>Es importante tener en cuenta que los métodos <code>.then</code> se ejecutan de manera asíncrona y en orden, cada uno esperando a que el anterior se resuelva, y que el valor devuelto de cada <code>.then</code> se pasa como argumento al siguiente.</p><h3 id="manejo-de-errores"><strong>Manejo de Errores </strong></h3><p>Cuando una promesa es rechazada, se activará el método <code>.catch()</code>, que es el encargado de manejar los errores. El método <code>.catch()</code> toma un único argumento, que es el error devuelto.</p><p>Otra forma de manejar errores en una promesa es usando el bloque "try-catch" dentro de un método <code>.then</code>.</p><p>Por ejemplo:</p><pre><code class="language-javascript">fetch("https://api.github.com/users/octocat")
  .then((response) =&gt; response.json())
  .then((data) =&gt; {
    try {
      //procesando la información recibida
      console.log(data);
    } catch (error) {
      console.log(error);
    }
  })
  .catch((error) =&gt; console.log(error));</code></pre><p>Del código anterior:</p><ul><li>La función <code>fetch()</code> hace una solicitud a la API de GitHub para obtener datos de usuario.</li><li>El bloque "try-catch" se utiliza dentro del segundo <code>.then</code> para manejar cualquier error que pueda ocurrir en el procesamiento de la información recibida del servidor. </li><li>Por último, el método <code>.catch</code> externo sólo manejará los errores que ocurran durante la solicitud de datos. </li></ul><p>El manejo de errores es muy importante ya que las promesas se usan para manejar operaciones asíncronas, y estas operaciones pueden fallar por razones muy diversas. </p><p>Si se produce un error durante la ejecución de una promesa y no se maneja, el programa continuará ejecutándose y puede provocar un comportamiento inesperado o fallas. </p><p>Al manejar errores, nos aseguramos de que el programa podrá seguir funcionando incluso cuando ocurra un error y podremos brindarle al usuario información valiosa sobre el problema. </p><h3 id="-c-mo-usar-el-m-todo-promise-all"><strong>¿Cómo usar el método Promise.all?</strong></h3><p>El método <code>Promise.all()</code> recibe un arreglo de promesas como argumento y retorna una única promesa que se cumple solamente cuando todas las promesas del arreglo se hayan cumplido. Esto puede ser útil cuando esperas a la resolución de muchas promesas antes de realizar una acción. </p><p>Por ejemplo, si quieres obtener información de múltiples URLs.</p><pre><code class="language-javascript">let promesa1 = fetch('https://jsonplaceholder.typicode.com/posts/1');
let promesa2 = fetch('https://jsonplaceholder.typicode.com/posts/2');
let promesa3 = fetch('https://jsonplaceholder.typicode.com/posts/3');
</code></pre><p>Aquí, <code>promesa1</code>, <code>promesa2</code>, y <code>promesa3</code> son promesas que obtienen información de tres URLs distintas.</p><p>Ahora puedes utilizar <code>Promise.all([promesa1, promesa2, promesa3])</code> para esperar a que se resuelvan todas las promesas antes de realizar una acción con los datos, como se muestra a continuación. </p><pre><code class="language-javascript">Promise.all([promise1, promise2, promise3])
.then((values) =&gt; {
  console.log(values);
})
</code></pre><p>En el ejemplo anterior:</p><ul><li><code>Promise.all()</code> recibe un arreglo de promesas como argumento y devuelve una nueva promesa.</li><li>El método <code>then</code> se llama en la promesa devuelta para imprimir en consola los resultados de todas las promesas que se pasaron como argumento, en el orden en que se pasaron a <code>Promise.all()</code>.</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2023/01/Screenshot-2023-01-26-103003-1.jpg" class="kg-image" alt="Screenshot-2023-01-26-103003-1" width="600" height="400" loading="lazy"></figure><p>Ten en cuenta que en caso de que alguna de las promesas pasadas como argumento sea rechazada, la promesa devuelta también será rechazada con el valor de la primera promesa rechazada.</p><h3 id="-c-mo-utilizar-fetch-api-con-promesas"><strong>¿Cómo utilizar Fetch API con Promesas?</strong></h3><p>En algunos de los ejemplos en este artículo hemos estado utilizando API Fetch &nbsp;que podría ser desconocida para algunos lectores. Por ello, en esta sección explicaremos los conceptos básicos de la API Fetch para aquellos que necesiten &nbsp;familiarizarse más con ella.</p><p>La API Fetch es una función incorporada en JavaScript que permite realizar solicitudes de red, como obtener datos de un servidor. Es una alternativa moderna a la antigua API XMLHttpRequest y está diseñada para ser más fácil y poderosa.</p><p>Aquí hay un ejemplo de cómo usar la API Fetch para obtener datos de un servidor:</p><pre><code class="language-javascript">fetch('https://some-api.com/data')
  .then(response =&gt; response.json())
  .then(data =&gt; {
    console.log(data);
  })
  .catch(error =&gt; {
    console.error('Error:', error);
  });
</code></pre><p>En este ejemplo,</p><ul><li>Se utiliza el método <code>fetch()</code> para hacer una solicitud al servidor ubicado en "<a href="https://some-api.com/data">https://some-api.com/data</a>". El valor devuelto es una promesa que se cumplirá con la respuesta del servidor. </li><li> Se llama al primer método <code>.then()</code> para consumir la promesa y extraer datos JSON de la respuesta. </li><li>El siguiente método <code>then()</code> se llama para registrar en la consola los datos extraídos. &nbsp;</li><li>Si se produce algún error, este será capturado por el método <code>catch()</code> y se imprimirá por consola.</li></ul><p>Espero que esta explicación &nbsp;ayude a aclarar cualquier confusión sobre la API Fetch y permita comprender mejor los ejemplos proporcionados en este artículo.</p><h2 id="funciones-as-ncronas-con-async-await"><strong>Funciones Asíncronas con<strong><strong><strong> <code>async</code>/<code>await</code></strong></strong></strong></strong></h2><p><code>Async/Await</code> es una función que permite escribir código asíncrono de una manera más sincrónica y legible.</p><ul><li><code>async</code> es una palabra clave que se utiliza para declarar una función como asíncrona.</li><li><code>await</code> es una palabra clave que se utiliza dentro de una función <code>async</code> para pausar la ejecución de la función hasta que se resuelva una promesa.</li></ul><p>Aquí, un ejemplo de cómo puede usar &nbsp;<code>async/await</code>:</p><pre><code class="language-javascript">async function obtenerDatos() {
  const respuesta = await fetch('https://jsonplaceholder.typicode.com/posts/1');
  const datos = await respuesta.json();
  console.log(datos);
}

obtenerDatos();
</code></pre><p>En este ejemplo,</p><ul><li>Se declara la función <code>obtenerDatos</code> como una función asincrónica utilizando la palabra clave <code>async</code>.</li><li>Dentro de la función asincrónica, utilizamos la palabra clave <code>await</code> para esperar a que se complete la función <code>fetch</code> y recuperar algunos datos de una API. </li><li>Una vez que se obtienen los datos, volvemos a usar <code>await</code> para esperar y analizar los datos recuperados como JSON. </li><li>Por último, imprimimos los datos en la consola.</li></ul><p>"Aync/Await" es una herramienta poderosa para manejar operaciones asíncronas. Al eliminar las callbacks y proporcionar una forma más intuitiva de manejar operaciones asíncronas, el uso de "async/await" resulta en un código más legible y fácil de mantener.</p><p>Usando la palabra clave "async" antes de la definición de una función y la palabra clave "await" antes de una operación asíncrona hace que el código parezca más como código sincrónico, lo que lo hace más fácil de entender.</p><p>En general, "Async/Await" es un conocimiento valioso para la caja de herramientas del desarrollador de JavaScript y puede simplificar de manera significativa el manejo de operaciones asíncronas en tu código.</p><h2 id="conclusi-n"><strong><strong>Conclusión</strong></strong></h2><p>En resumen, la programación asíncrona es un concepto esencial en JavaScript que permite que tu código se ejecute en segundo plano sin bloquear la ejecución de otro código.</p><p>Los desarrolladores pueden crear aplicaciones más eficientes y receptivas utilizando funciones como callbacks, async/await y promesas.</p><p>La programación asíncrona puede ser difícil de entender al principio. Pero con la práctica y una comprensión sólida de los conceptos, se convierte en una herramienta poderosa para crear aplicaciones web de alto rendimiento. </p><p>¡Gracias por leer este artículo!</p><p>Si disfrutaste de este artículo y quieres aprender más sobre programación, sígueme en Instagram <a href="https://www.instagram.com/alege_dev/">@alege_dev</a>, donde publico regularmente consejos sobre varios temas de programación. </p><hr> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
