Salt la conținutul principal
Modulul 7 · Lecția 1 din 425/32 în curs~12 min
Lecții din modul (1/4)

Promisiuni: ce sunt

O Promisă este o valoare care reprezintă rezultatul unei operațiuni care se va termina în viitor. Poate fi în una dintre cele trei stări:

  • în așteptare — operațiunea este încă în curs
  • realizat — s-a terminat cu succes, există o valoare
  • respins — a eșuat, există o eroare

Odată ce părăsește starea în așteptare, este „rezolvat” pentru totdeauna.

Crearea unei Promisiune rezolvată

Cele mai comune două moduri — aproape niciodată nu vei crea o Promisiune „de mână” cu constructorul:

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

Citirea rezultatului: .then / .catch

JS
Promise.resolve(10).then((v) => {
  console.log(v); // 10
});

Promise.reject(new Error('no')).catch((e) => {
  console.log(e.message); // 'no'
});

.then primește o funcție care este apelată cu valoarea rezolvată. .catch primește o funcție apelată cu eroarea în caz de respingere.

Înlănţuire

Fiecare .then returnează la rândul său o Promisiune: le puteți lega pentru a transforma valoare pas cu pas.

JS
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log(n)); // 11

Dacă oricare dintre .then aruncă (sau returnează o Promisiune care eșuează), execuția sare la primul .catch ulterior.

Constructor (rar)

JS
const p = new Promise((resolve, reject) => {
  if (Math.random() > 0.5) resolve('ok');
  else reject(new Error('no'));
});

Îl veți folosi numai atunci când trebuie să „promiteți” ceva care utilizează apeluri inverse (de exemplu, vechile API-uri DOM sau setTimeout).

Încearcă

Exercițiu#js.m7.l1.e1
Încercări: 0Se încarcă…

Definiți `promisedVersion(n)` care, dat un număr, returnează o Promisiune rezolvată cu dublul lui n.

Se încarcă editorul...
Afișează indiciu

return Promise.resolve(n * 2)

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#js.m7.l1.e2
Încercări: 0Se încarcă…

Definiți `incrementThree(p)` care primește o Promisiune a unui număr și returnează o Promisiune a numărului + 3. Folosiți un lanț .then.

Se încarcă editorul...
Afișează indiciu

p.then((n) => n + 3)

Soluție disponibilă după 3 încercări