⊗jsSpPrmFC 171 of 294 menu

Creazione di Promise risolte in JavaScript

A volte potresti aver bisogno di creare una promise già risolta. Per questo esistono due metodi: il metodo Promise.resolve crea una promise risolta con successo, Promise.reject crea una promise rifiutata. Questi metodi ricevono come parametro ciò che diventerà il risultato o l'errore della promise rispettivamente.

Quando potremmo aver bisogno di una promise già risolta? Diamo un'occhiata a un esempio. Supponiamo di avere una funzione che accetta un numero come parametro, fa qualcosa in modo asincrono e restituisce una promise con il risultato:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

Utilizzeremo la nostra funzione nel seguente modo:

func(5).then(function(res) { console.log(res); // restituirà 25 });

Supponiamo ora di aver deciso che eseguiremo la nostra operazione asincrona solo se viene passato un numero maggiore di zero. In caso contrario il risultato della funzione dovrebbe essere zero:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // risultato zero } }

Tuttavia, ora risulta che la funzione restituisce o una promise o un numero. A causa di ciò non possiamo più applicare il metodo then al risultato della funzione, poiché nel caso in cui la funzione restituisca un numero otterremo un errore:

func(0).then(function(res) { // errore, applichiamo il metodo then a zero });

Il metodo Promise.resolve ci aiuterà a risolvere il problema:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // restituiamo una promise, non un numero } }

Supponiamo ora di aver deciso che per lo zero passato dobbiamo restituire zero, mentre per i numeri minori di zero - un'eccezione. In questo il metodo Promise.reject ci aiuterà:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // restituiamo una promise rifiutata } }
Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta