¿Qué son las promesas?

Las promesas son objetos que representan el resultado de una operación asíncrona. Cuando se ejecuta una operación asíncrona, se devuelve una promesa que se puede utilizar para determinar cuándo se completa la operación y para obtener el resultado de la operación.

Las promesas tienen dos estados posibles: "cumplida" o "rechazada". Si la operación asíncrona se completa con éxito, la promesa se marca como "cumplida" y se proporciona el resultado de la operación. Si la operación asíncrona falla, la promesa se marca como "rechazada" y se proporciona un error o una excepción.

Una vez que se ha marcado una promesa como "cumplida" o "rechazada", no puede cambiar su estado. Esto significa que una vez que se ha obtenido el resultado de una promesa, no se puede volver a intentar obtener el resultado de nuevo.

Cómo se crean las promesas

Para crear una promesa en JavaScript, puede emplear el constructor Promise. El constructor Promise toma una función de devolución de llamada como argumento, que a su vez toma dos argumentos: resolve y reject. La función de devolución de llamada se ejecuta cuando se crea la promesa y se utiliza para realizar la operación asíncrona.

Cuando se llama a la función resolve, se marca la promesa como "cumplida" y se proporciona el resultado de la operación. Cuando se llama a la función reject, se marca la promesa como "rechazada" y se proporciona el error o excepción.

Aquí hay un ejemplo de cómo se crea una promesa que se cumplirá después de un retraso de 1 segundo:

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Hello, world!');
  }, 1000);
});

En este ejemplo, la promesa se cumplirá con el valor "Hello, world!" después de 1 segundo.

Cómo se utilizan las promesas

Una vez que se ha creado una promesa, puede utilizar el método then para especificar qué debe hacerse cuando se complete la promesa. El método then toma dos funciones de devolución de llamada como argumentos: una para manejar el caso de cumplimiento de la promesa y otra para manejar el caso de rechazo de la promesa.

Por ejemplo, aquí está cómo se puede utilizar el método then para imprimir el resultado de la promesa del ejemplo anterior:

myPromise.then(
  result => {
    console.log(result);
  },
  error => {
    console.error(error);
  }
)

En este ejemplo, se imprimirá "Hello, world!" cuando se complete la promesa. Si la promesa se rechaza, se imprimirá el error o excepción proporcionado.

Cadena de promesas

Una vez que ha manejado el resultado de una promesa con el método then, puede encadenar otra promesa al resultado de la primera promesa. Esto le permite realizar operaciones asíncronas en serie de manera más fácil y legible.

Por ejemplo, supongamos que queremos realizar dos operaciones asíncronas en serrie: primero, obtener un usuario de una API y, a continuación, obtener los amigos del usuario de otra API. Podríamos hacerlo de la siguiente manera:

getUser()
  .then(user => {
    return getFriends(user.id);
  })
  .then(friends => {
    console.log(friends);
  })
  .catch(error => {
    console.error(error);
  });

En este ejemplo, primero se llama a la función getUser y se espera a que se complete la promesa. Una vez que se ha completado la promesa, se llama a la función getFriends con el ID del usuario y se espera a que se complete la promesa. Una vez que se ha completado la promesa, se imprime la lista de amigos. Si ocurre un error en cualquiera de las promesas, se maneja con el método catch.

Conclusión

Las promesas son una herramienta útil para manejar operaciones asíncronas en JavaScript de manera más fácil y legible. Al dominar el uso de las promesas, podrás escribir código más eficiente y manejar errores de manera más sencilla.