Promise.resolve / Promise.reject în JavaScript

Cod asincron ES2015 (ES6)

Creează o promisiune deja împlinită cu o valoare sau deja respinsă cu o eroare.

Sintaxă
Promise.resolve(valoare)
Promise.reject(eroare)

Ce face Promise.resolve / Promise.reject

Promise.resolve(valoare) returnează o promisiune împlinită cu valoarea dată. Dacă valoarea este deja o promisiune, o returnează neschimbată. Promise.reject(eroare) returnează o promisiune respinsă.

Sunt utile când o funcție trebuie să returneze mereu o promisiune, chiar și atunci când are rezultatul pe loc (de exemplu din cache). Chiar și pentru o promisiune deja împlinită, then rulează abia după codul sincron curent.

Parametri

Parametru Descriere
valoare Pentru resolve: valoarea (sau promisiunea) cu care se împlinește.
eroare Pentru reject: motivul respingerii, de preferat un Error.

Ce returnează

O Promise.

Exemple

Exemplul 1: Rezultat din cache sau de la server

const cache = new Map([["RON", 1], ["EUR", 4.97]]);

function curs(moneda) {
  if (cache.has(moneda)) return Promise.resolve(cache.get(moneda));
  return Promise.reject(new Error(`Curs necunoscut pentru ${moneda}`));
}

curs("EUR").then((v) => console.log("EUR:", v));
curs("XYZ").catch((e) => console.log(e.message));
console.log("cod sincron");

Rezultat

cod sincron
EUR: 4.97
Curs necunoscut pentru XYZ

Exemplul 2: resolve nu împachetează de două ori

const p = Promise.resolve(42);

console.log(Promise.resolve(p) === p);
console.log(await Promise.resolve(Promise.resolve("valoare")));

Rezultat

true
valoare

Greșeli frecvente

  • Dai lui reject un text în loc de Error. Pierzi stiva de apeluri, iar codul care citește e.message primește undefined.

Comenzi înrudite

  • Promise / then: O promisiune reprezintă un rezultat care va veni mai târziu: o cerere la server, un fișier citit, o pauză.
  • Promise.withResolvers: Creează o promisiune împreună cu funcțiile resolve și reject, folosibile din afara ei.
  • async / await: Scrie cod asincron care se citește ca un cod obișnuit, de sus în jos.