O Promise.try está disponível como padrão

Jeremy Wagner
Jeremy Wagner

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.