Publicado em 17 de janeiro de 2025
Fazer trabalho assíncrono na Web pode ser desafiador, e muitas das atividades na Web envolvem assincronia. Seja em chamadas fetch
ou outras operações assíncronas, a forma como você faz esse trabalho é facilitada pelos navegadores quando os métodos integrados oferecem um processamento de erros robusto. Isso já foi fornecido para promessas usando os métodos then
, catch
e finally
.
Mesmo assim, a maneira como você projeta a base de código do aplicativo precisa ser flexível, e nem tudo o que você vai fazer no aplicativo é necessariamente assíncrono. Às vezes, pode ser necessário processar o resultado de um callback de uma maneira mais simples, se não importar se um callback transmitido para um Promise
é síncrono ou não. Promise.try
é um método disponível em todos os principais mecanismos de navegadores que simplifica esse processo para os desenvolvedores. Isso significa que ele está disponível como padrão.
O que é Promise.try
e como ele funciona?
Promise.try
é um método de conveniência que facilita o processamento de erros para funções de callback síncronas, em comparação com o uso de 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);
Em seguida, usando os métodos then
, catch
e finally
, processe a resolução ou rejeição de uma Promise
:
Promise.try(callback)
.then(result => console.log(result))
.catch(error => console.log(error))
.finally(() => console.log("All settled."));
E se a função de callback tiver argumentos? Isso pode ser feito de duas maneiras:
// 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);
O principal benefício do uso de Promise.try
é que ele permite usar promessas de maneira uniforme, independentemente de o callback transmitido ser síncrono ou assíncrono. Isso significa que, no caso de uma função utilitária que transmite callbacks para um Promise
amplamente usado no código, o uso de Promise.try
garante o tratamento adequado de erros para qualquer callback transmitido. Para mais informações e outras possíveis dúvidas ou casos de uso, consulte a documentação do MDN sobre Promise.try
.
Conclusão
Agora que o Promise.try
alcançou a fase "Disponível", você pode usá-lo em todos os principais mecanismos de navegador. Com o passar do tempo, você poderá usar Promise.try
nos seus aplicativos da Web com cada vez mais confiança de que ele será uma parte estável e interoperável da plataforma da Web.