Sobes.tech
Junior

Jakie znasz sposoby pracy z kodem asynchronicznym?

sobes.tech AI

Odpowiedź od AI

  • Funkcje zwrotne (Callback): Przekazywanie funkcji jako argumentu do innej funkcji, która zostanie wywołana po zakończeniu operacji asynchronicznej. Mogą prowadzić do "callback hell".
  • Obiekty Promise: Reprezentują ostateczne zakończenie (lub niepowodzenie) operacji asynchronicznej i jej wynikową wartość. Zapewniają bardziej strukturalne zarządzanie asynchronicnością.
    // Przykład użycia promisa
    fetch('/api/data')
      .then(response => response.json()) // Obsługa udanej odpowiedzi
      .then(data => console.log(data)) // Obsługa otrzymanych danych
      .catch(error => console.error('Błąd podczas pobierania danych:', error)); // Obsługa błędu
    
  • Async/await: Słodzik składniowy nad promesami, pozwalający pisać kod asynchroniczny w bardziej synchronicznym stylu, co czyni go bardziej czytelnym i łatwiejszym do debugowania.
    // Przykład użycia async/await
    async function fetchData() {
      try {
        const response = await fetch('/api/data'); // Oczekiwanie na promisa
        if (!response.ok) {
          throw new Error(`Błąd HTTP! status: ${response.status}`);
        }
        const data = await response.json(); // Oczekiwanie na promisa
        console.log(data);
      } catch (error) {
        console.error('Błąd podczas pobierania danych:', error); // Obsługa błędu
      }
    }
    fetchData();
    
  • Generatory (Generators): Mogą być używane do pracy z asynchronicznością w połączeniu z biblioteką co lub ręcznie, choć async/await stało się bardziej powszechne.

Porównanie głównych podejść:

Metoda Zalety Wady
Callbacks Proste na początku "Callback hell", złożoność obsługi błędów
Promises Lepsza czytelność, obsługa błędów Mogą być nieczytelne w łańcuchach operacji
Async/await Wysoka czytelność, podobieństwo do kodu synchronicznego Wymaga wsparcia środowiska dla async/await