Ce face Promise.prototype.finally
finally este locul pentru curățenie: ascunderea unui indicator de încărcare, reactivarea unui buton, închiderea unei conexiuni. Funcția nu primește niciun argument, pentru că nu știe dacă a fost succes sau eroare.
Rezultatul sau eroarea trec mai departe neschimbate prin finally, deci un .then sau .catch de după primește ce ar fi primit fără el. În funcțiile async, echivalentul este blocul finally din try / catch / finally.
Parametri
| Parametru | Descriere |
|---|---|
functie |
Funcția rulată la final, fără argumente. |
Ce returnează
O Promise nouă, cu același rezultat.
Exemple
Exemplul 1: Indicatorul de încărcare
const pauza = (ms, valoare) => new Promise((resolve) => setTimeout(() => resolve(valoare), ms));
const esec = (ms, mesaj) => new Promise((_, reject) => setTimeout(() => reject(new Error(mesaj)), ms));
function incarca(promisiune) {
console.log("⏳ se încarcă...");
return promisiune
.then((date) => console.log("date:", date))
.catch((e) => console.log("eroare:", e.message))
.finally(() => console.log("✔ indicator ascuns"));
}
await incarca(pauza(50, [1, 2, 3]));
await incarca(esec(50, "fără conexiune"));
Rezultat
⏳ se încarcă...
date: [ 1, 2, 3 ]
✔ indicator ascuns
⏳ se încarcă...
eroare: fără conexiune
✔ indicator ascuns
Exemplul 2: Valoarea trece neschimbată
const rezultat = await Promise.resolve(10).finally(() => 99);
console.log(rezultat);
Rezultat
10
Greșeli frecvente
- Încerci să schimbi rezultatul returnând ceva din
finally. Valoarea returnată este ignorată (doar o eroare aruncată acolo schimbă rezultatul).
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ă.try / catch: Prinde erorile, ca programul să nu se oprească și să poți afișa un mesaj clar.async / await: Scrie cod asincron care se citește ca un cod obișnuit, de sus în jos.