Promise.prototype.finally în JavaScript

Cod asincron ES2018

Rulează cod după ce promisiunea s-a terminat, indiferent dacă a reușit sau a eșuat.

Sintaxă
promisiune.finally(() => { ... })

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.