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.