Promise.try ahora está disponible en Baseline

Jeremy Wagner
Jeremy Wagner

Fecha de publicación: 17 de enero de 2025

Hacer trabajo asíncrono en la Web puede ser un desafío, y mucho de lo que se hace en la Web implica la asincronicidad. Ya sea que eso implique llamadas a fetch o a otras operaciones asíncronas, los navegadores facilitan la forma en que realizas ese trabajo cuando los métodos integrados proporcionan un manejo de errores sólido. Esto ya se proporcionó para las promesas con los métodos then, catch y finally.

Aun así, la forma en que diseñes la base de código de tu aplicación debe ser flexible, y no todo lo que hagas en ella es necesariamente asíncrono. A veces, es posible que desees controlar el resultado de una devolución de llamada de una manera más sencilla si no importara si una devolución de llamada que pasaste a un Promise es síncrona o no. Promise.try es un método que ahora está disponible en todos los motores de navegador principales y que simplifica este proceso para los desarrolladores, lo que significa que ahora está disponible en Baseline.

¿Qué es Promise.try y cómo funciona?

Promise.try es un método conveniente que facilita el manejo de errores para las funciones de devolución de llamada síncronas más que si usaras Promise.resolve:

// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());

// But it will be here:
Promise.try(callback);

Luego, con los métodos then, catch y finally, controla la resolución o el rechazo de un Promise:

Promise.try(callback)
  .then(result => console.log(result))
  .catch(error => console.log(error))
  .finally(() => console.log("All settled."));

¿Qué sucede si tu función de devolución de llamada tiene argumentos? Puedes abordar esto de dos maneras:

// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));

// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);

El beneficio principal de usar Promise.try es que te permite usar promesas de forma uniforme, independientemente de si la devolución de llamada que le pasas es síncrona o asíncrona. Esto significa que, en el caso de una función de utilidad que pasa devoluciones de llamada a un Promise que se usa ampliamente en tu código, usar Promise.try garantiza una administración de errores adecuada para cualquier devolución de llamada que le pases. Para obtener más información y otras posibles inquietudes o casos de uso, consulta la documentación de MDN sobre Promise.try.

Conclusión

Ahora que Promise.try alcanzó el estado Disponible recientemente en el modelo de referencia, deberías poder usarlo en todos los motores de navegador principales. Con el tiempo, deberías poder usar Promise.try en tus aplicaciones web con cada vez más confianza de que será una parte estable e interoperable de la plataforma web.