Cześć, tu Jakub. Polubiłeś devFlipCards? Postaw mi kawę

Opanowanie Sztuki Asynchronicznego JavaScript: Callbacki, Promisy i Async/Await

Koncepcje Asynchronicznego JavaScript
Jakub3 min read

Opanowanie Sztuki Asynchronicznego JavaScript: Callbacki, Promisy i Async/Await

JavaScript, będący językiem jednowątkowym, w dużej mierze opiera się na programowaniu asynchronicznym, aby wykonywać zadania takie jak żądania sieciowe, czytanie plików i inne, bez blokowania głównego wątku wykonawczego. W tym wpisie na blogu zagłębimy się w programowanie asynchroniczne w JavaScript, badając callbacki, promisy i nowoczesną składnię async/await.

Wprowadzenie do Asynchronicznego JavaScript

Jednowątkowa Natura JavaScript

JavaScript działa w środowisku jednowątkowym, co oznacza, że może wykonywać jedną operację na raz. Może to być problematyczne podczas wykonywania zadań, które zajmują dużo czasu, takich jak pobieranie danych z serwera. Aby obsłużyć te operacje, JavaScript używa modelu asynchronicznego.

Pętla Zdarzeń

Pętla zdarzeń jest kluczową częścią modelu współbieżności JavaScript. Pozwala JavaScript na wykonywanie operacji nieblokujących, przenosząc zadania do API przeglądarki lub innych wątków, a następnie wykonując callback po zakończeniu operacji.

Modele Programowania Asynchronicznego

JavaScript oferuje kilka modeli obsługi operacji asynchronicznych: Callbacki, Promisy i Async/Await. Zbadajmy każdy z nich szczegółowo.

Callbacki

Callbacki to funkcje, które są przekazywane jako argumenty do innych funkcji i są wykonywane po zakończeniu danego zadania. Był to pierwotny sposób obsługi operacji asynchronicznych w JavaScript.

Przykład Callbacków

function fetchData(callback) { setTimeout(() => { callback('Dane pobrane!'); }, 2000); } fetchData((data) => { console.log(data); });

Piekło Callbacków

Jednym z minusów używania callbacków jest tzw. "callback hell". Występuje to, gdy wiele operacji asynchronicznych jest zagnieżdżonych w sobie nawzajem, prowadząc do kodu, który jest trudny do odczytania i utrzymania.

doTask1(() => { doTask2(() => { doTask3(() => { // I tak dalej... }); }); });

Promisy

Promisy zapewniają bardziej elegancki sposób obsługi operacji asynchronicznych. Promis reprezentuje ostateczne zakończenie (lub niepowodzenie) operacji asynchronicznej i jej wynikową wartość.

Stany Promisa

  • Oczekujący: Stan początkowy, ani spełniony, ani odrzucony.
  • Spełniony: Operacja zakończona sukcesem.
  • Odrzucony: Operacja zakończona niepowodzeniem.

Tworzenie i Używanie Promisów

const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promis spełniony!'); }, 2000); }); myPromise.then((message) => { console.log(message); }).catch((error) => { console.error(error); });

Łączenie Promisów

Promisy można łączyć, aby uniknąć głęboko zagnieżdżonej struktury callbacków.

fetchData() .then((data) => { return processData(data); }) .then((processedData) => { return saveData(processedData); }) .then(() => { console.log('Wszystkie zadania zakończone!'); }) .catch((error) => { console.error('Błąd:', error); });

Async/Await

Składnia async/await, wprowadzona w ES2017, zapewnia czystszy i bardziej czytelny sposób pracy z promisami.

Używanie Async/Await

Funkcje async zawsze zwracają promis. Await może być używane do wstrzymania wykonania funkcji async do momentu, gdy promis zostanie spełniony.

async function fetchData() { try { const data = await getData(); console.log(data); } catch (error) { console.error('Błąd:', error); } } fetchData();

Obsługa Błędów

Z async/await, obsługa błędów staje się prosta przy użyciu bloków try/catch.

Wsparcie Przeglądarki

Większość nowoczesnych przeglądarek obsługuje async/await. Jednak jeśli celujesz w starsze przeglądarki, możesz potrzebować użyć transpilera jak Babel.

Podsumowanie

Programowanie asynchroniczne jest niezbędną częścią rozwoju JavaScript. Zrozumienie, jak używać callbacków, promisów i async/await może znacznie poprawić twoją zdolność do pisania efektywnego i łatwego w utrzymaniu kodu JavaScript. W miarę jak język się rozwija, async/await stało się preferowanym wyborem ze względu na swoją prostotę i czytelność.

Opanowanie tych koncepcji nie tylko pomoże ci w pisaniu lepszego kodu, ale także przygotuje cię do bardziej zaawansowanych tematów w JavaScript i rozwoju frontendowym.

Dalsze Czytanie

J

3 min read

Artykuł Ci się spodobał?
Nie możesz znaleźć wspólnego terminu na spotkanie z przyjaciółmi? Sprawdź nasze narzędzie
commondate.xyz