Pubblicata: 17 gennaio 2025
Eseguire operazioni asincrone sul web può essere complicato e molte delle attività svolte sul web richiedono l'asincronicità. Che si tratti di chiamate fetch
o di altre operazioni asincrone, il modo in cui svolgi questo lavoro è semplificato dai browser quando i metodi integrati forniscono una gestione degli errori solida. Questo è già stato fornito per le promesse che utilizzano i metodi then
, catch
e finally
.
Tuttavia, il modo in cui architetti il codice base della tua applicazione deve essere flessibile e non tutto ciò che farai nella tua applicazione è necessariamente asincrono. A volte potresti voler gestire il risultato di un callback in un modo più semplice se non fosse importante che un callback passato a un Promise
sia sincrono o meno. Promise.try
è un metodo ora disponibile in tutti i principali motori dei browser che semplifica questa operazione per gli sviluppatori, il che significa che ora è disponibile come riferimento.
Che cos'è Promise.try
e come funziona?
Promise.try
è un metodo di utilità che semplifica la gestione degli errori per le funzioni di callback sincrone rispetto all'utilizzo di 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);
Quindi, utilizzando i metodi then
, catch
e finally
, gestisci la risoluzione o il rifiuto di un Promise
:
Promise.try(callback)
.then(result => console.log(result))
.catch(error => console.log(error))
.finally(() => console.log("All settled."));
Che cosa succede se la funzione di callback ha argomenti? Puoi gestire questo problema in due modi:
// 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);
Il vantaggio principale dell'utilizzo di Promise.try
è che ti consente di utilizzare le promesse in modo uniforme, indipendentemente dal fatto che il callback che le passi sia sincrono o asincrono. Ciò significa che, nel caso di una funzione di utilità che passa i callback a un Promise
ampiamente utilizzato nel codice, l'utilizzo di Promise.try
garantisce una gestione corretta degli errori per qualsiasi callback che gli passi. Per ulteriori informazioni e altri potenziali problemi o casi d'uso, consulta la documentazione MDN per Promise.try
.
Conclusione
Ora che Promise.try
ha raggiunto il livello Base di recente disponibilità, dovresti essere in grado di utilizzarlo in tutti i principali motori dei browser. Nel tempo, dovresti aspettarti di poter utilizzare Promise.try
nelle tue applicazioni web con una crescente certezza che sarà una parte stabile e interoperabile della piattaforma web.