⊗jsSpPrmFC 171 of 294 menu

Crearea promisiunilor rezolvate în JavaScript

Uneori ai putea avea nevoie să creezi o promisiune deja rezolvată. Pentru aceasta există două metode: metoda Promise.resolve crează o promisiune rezolvată cu succes, Promise.reject crează o promisiune respinsă. Ca parametru, aceste metode primesc ceea ce va deveni rezultatul sau eroarea promisiunii, respectiv.

Când am putea avea nevoie de o promisiune deja rezolvată? Să ne uităm la un exemplu. Să presupunem că avem o funcție care primește un număr ca parametru, face ceva cu el în mod asincron și returnează o promisiune cu rezultatul:

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

Vom folosi funcția noastră în felul următor:

func(5).then(function(res) { console.log(res); // va afișa 25 });

Să presupunem acum că am decis că operația noastră asincronă o vom efectua doar dacă este transmis un număr mai mare decât zero. În caz contrar, rezultatul funcției ar trebui să fie zero:

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

Cu toate acestea, acum rezultă că funcția returnează fie o promisiune, fie un număr. Din această cauză, nu mai putem aplica metoda then rezultatului funcției, deoarece în cazul în care funcția returnează un număr, vom obține o eroare:

func(0).then(function(res) { // eroare, aplicăm metoda then la zero });

Metoda Promise.resolve ne va ajuta să remediem problema:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // returnăm o promisiune, nu un număr } }

Să presupunem acum că am decis că pentru zero transmis trebuie să returnăm zero, iar pentru numere mai mici decât zero - o excepție. Metoda Promise.reject ne va ajuta în acest sens:

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'); // returnăm o promisiune respinsă } }
Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge