Sobes.tech
Middle

Czego używałeś przed pojawieniem się Promise?

sobes.tech AI

Odpowiedź od AI

Przed pojawieniem się Promise, powszechnie używano callbacków.

Istota callbacków:

Funkcja jest przekazywana do innej funkcji jako argument i jest wykonywana po zakończeniu określonej operacji.

Przykład:

// Przykład wywołania operacji asynchronicznej z callbackem
function fetchData(callback) {
  setTimeout(() => {
    const data = "Some data";
    callback(null, data); // Pierwszy argument to błąd, drugi to wynik
  }, 1000);
}

fetchData((err, data) => {
  if (err) {
    console.error("Błąd podczas pobierania danych:", err);
  } else {
    console.log("Odebrane dane:", data);
  }
});

Wady korzystania wyłącznie z callbacków:

  • Callback Hell (Piekło callbacków): Ciąg zagnieżdżonych operacji asynchronicznych prowadzi do mocno zagnieżdżonego i trudnego do odczytania kodu.
  • Trudności w obsłudze błędów: Konieczność przekazywania i sprawdzania błędów na każdym poziomie zagnieżdżenia.
  • Brak standaryzowanego podejścia: Różne biblioteki mogły używać różnych konwencji dla callbacków.

Alternatywne podejścia przed Promise:

Przed pojawieniem się Promise, oprócz "czystych" callbacków, używano bibliotek i wzorców do zarządzania asynchronicznością, takich jak:

  • Biblioteki asynchroniczne: Na przykład async (dla Node.js, ale można było używać także w przeglądarce). Zapewniały narzędzia do zarządzania strumieniami asynchronicznymi (równoległe wykonywanie, wykonywanie sekwencyjne).
  • Wzorzec Publisher/Subscriber (Pub/Sub): Dla bardziej złożonych scenariuszy interakcji.
  • Emitery zdarzeń: W Node.js i środowiskach przeglądarkowych (np. EventEmitter).

Niemniej jednak, callbacki pozostawały podstawą dla wielu operacji asynchronicznych. Promise zapewniły bardziej strukturalny, zunifikowany i czytelny sposób pracy z asynchronicznością, eliminując wiele problemów "Callback Hell".