Promise.try è ora disponibile come baseline

Jeremy Wagner
Jeremy Wagner

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.