Promise.try în JavaScript

Cod asincron ES2025

Apelează o funcție (sincronă sau asincronă) și returnează mereu o promisiune, inclusiv pentru erorile aruncate.

Sintaxă
Promise.try(functie, arg1, arg2, ...)

Ce face Promise.try

Când nu știi dacă o funcție este sincronă sau returnează o promisiune, apelul direct are o problemă: o eroare aruncată sincron nu ajunge în .catch(). Promise.try apelează funcția imediat și transformă orice rezultat sau eroare într-o promisiune.

Argumentele de după funcție îi sunt transmise la apel.

Parametri

Parametru Descriere
functie Funcția apelată.
arg1, arg2, ... Opțional. Argumentele ei.

Ce returnează

O Promise cu rezultatul funcției sau respinsă cu eroarea ei.

Exemple

Exemplul 1: Erorile sincrone ajung în catch

function citesteConfig(text) {
  return JSON.parse(text);
}

Promise.try(citesteConfig, '{"port": 8080}').then((c) => console.log("port", c.port));
Promise.try(citesteConfig, "{port}").catch((e) => console.log("prins:", e.name));

Rezultat

port 8080
prins: SyntaxError

Greșeli frecvente

  • Scrii Promise.resolve(f()) crezând că prinde erorile lui f. Eroarea este aruncată înainte ca Promise.resolve să fie apelat.

Comenzi înrudite

  • Promise.resolve / Promise.reject: Creează o promisiune deja împlinită cu o valoare sau deja respinsă cu o eroare.
  • try / catch: Prinde erorile, ca programul să nu se oprească și să poți afișa un mesaj clar.
  • Promise / then: O promisiune reprezintă un rezultat care va veni mai târziu: o cerere la server, un fișier citit, o pauză.