⊗jsSpPrmFC 171 of 294 menu

Création de promesses résolues en JavaScript

Parfois, vous pourriez avoir besoin de créer une promesse déjà résolue. Pour cela, il existe deux méthodes : la méthode Promise.resolve crée une promesse résolue avec succès, Promise.reject crée une promesse rejetée. Ces méthodes reçoivent en paramètre ce qui deviendra le résultat ou l'erreur de la promise respectivement.

Quand pourrions-nous avoir besoin d'une promesse déjà résolue ? Regardons un exemple. Supposons que nous ayons une fonction qui prend un nombre en paramètre, fait quelque chose de manière asynchrone avec celui-ci et retourne une promesse avec le résultat :

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

Nous utiliserons notre fonction de la manière suivante :

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

Supposons maintenant que nous ayons décidé que notre opération asynchrone ne serait effectuée que si un nombre supérieur à zéro est passé. Sinon, le résultat de la fonction devrait être zéro :

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // résultat zéro } }

Cependant, il en résulte maintenant que la fonction retourne soit une promesse, soit un nombre. À cause de cela, nous ne pouvons plus appliquer la méthode then au résultat de la fonction, car dans le cas où la fonction retourne un nombre, nous obtiendrons une erreur :

func(0).then(function(res) { // erreur, on applique la méthode then à zéro });

La méthode Promise.resolve nous aidera à résoudre le problème :

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // on retourne une promesse, et non un nombre } }

Supposons maintenant que nous ayons décidé que pour un zéro passé, nous devrions retourner zéro, et pour les nombres inférieurs à zéro - une exception. La méthode Promise.reject nous y aidera :

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'); // retournons une promesse rejetée } }
Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser