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".