⊗jsSpPrmFC 171 of 294 menu

Creación de promesas resueltas en JavaScript

A veces puedes necesitar crear una promesa que ya esté resuelta. Para esto existen dos métodos: el método Promise.resolve crea una promesa exitosamente resuelta, Promise.reject crea una promesa rechazada. Como parámetro, estos métodos reciben lo que se convertirá en el resultado o el error de la promesa respectivamente.

¿Cuándo podemos necesitar una promesa ya resuelta? Veamos un ejemplo. Supongamos que tenemos una función que recibe un número como parámetro, hace algo con él de forma asíncrona y devuelve una promesa con el resultado:

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

Usaremos nuestra función de la siguiente manera:

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

Supongamos ahora que decidimos que nuestra operación asíncrona la realizaremos solo si se pasa un número mayor que cero. En caso contrario, el resultado de la función debe ser cero:

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

Sin embargo, ahora resulta que la función devuelve o una promesa, o un número. Debido a esto, ya no podemos aplicar el método then al resultado de la función, ya que en el caso de que la función devuelva un número obtendremos un error:

func(0).then(function(res) { // error, aplicamos el método then a cero });

El método Promise.resolve nos ayudará a solucionar el problema:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // devolvemos una promesa, no un número } }

Supongamos ahora que decidimos que para el cero debemos devolver cero, y para los números menores que cero - una excepción. El método Promise.reject nos ayudará en esto:

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'); // devolvemos una promesa rechazada } }
Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar