0Pricing
JavaScript Academy · Lekcja

Iteratory asynchroniczne — for await...of i generatory async

Używanie generatorów async i for await...of do odbierania wartości pojawiających się w czasie. Poznanie Symbol.asyncIterator i prostych potoków asynchronicznych

Iteratory asynchroniczne — for await...of i generatory async to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Dlaczego iteracja asynchroniczna?

Cel: Pobierać wartości, które mogą pojawić się dopiero później.

  • Pętle for await...of przechodzą po asynchronicznie iterowalnych obiektach
  • async function* tworzy generatory asynchroniczne
  • Symbol.asyncIterator oznacza obiekt jako asynchronicznie iterowalny
  • Mały przykład asynchronicznego mapowania
Iteratory asynchroniczne — for await...of i generatory async — ilustracja 1

async function* i for await...of

Generator asynchroniczny (async function*) generuje wartości pobierane przez for await...of.

// Use an async generator to yield values (could be delayed in real apps)
(async function () {
  async function* countAsync(n) {
    for (let i = 1; i <= n; i = i + 1) {
      // In real code you could await a delay or I/O here
      yield i;
    }
  }

  for await (const x of countAsync(3)) {
    console.log("async value:", x);
  }
})();
Iteratory asynchroniczne — for await...of i generatory async — ilustracja 2

Ręczne użycie asynchronicznego next()

next() wywołane na asynchronicznym iteratorze zwraca promise, który rozwiązuje się do wartości { value, done }.

// Drive an async iterator manually with await it.next()
(async function () {
  async function* two() {
    yield "A";
    yield "B";
  }
  const it = two();
  console.log(await it.next()); // { value: "A", done: false }
  console.log(await it.next()); // { value: "B", done: false }
  console.log(await it.next()); // { value: undefined, done: true }
})();
Iteratory asynchroniczne — for await...of i generatory async — ilustracja 3

Symbol.asyncIterator w obiektach

Dodaj [Symbol.asyncIterator](), która zwraca asynchroniczny iterator, aby obiekt współpracował z for await...of.

// Mark a plain object as async-iterable via Symbol.asyncIterator
(async function () {
  const AsyncTwice = {
    from: function (a, b) {
      return {
        a: a, b: b,
        [Symbol.asyncIterator]: async function () {
          let step = 0;
          return {
            next: async function () {
              if (step === 0) { step = 1; return { value: a, done: false }; }
              if (step === 1) { step = 2; return { value: b, done: false }; }
              return { value: undefined, done: true };
            }
          };
        }
      };
    }
  };

  for await (const v of AsyncTwice.from("X", "Y")) {
    console.log("from object:", v);
  }
})();
Iteratory asynchroniczne — for await...of i generatory async — ilustracja 4

Asynchroniczny potok mapowania

Łącz generatory asynchroniczne, aby budować niewielkie potoki oczekujące na każdy etap.

// Async map: transform values lazily while awaiting work
(async function () {
  async function* countAsync(n) {
    for (let i = 1; i <= n; i = i + 1) {
      yield i;
    }
  }

  async function* asyncMap(iterable, fn) {
    for await (const v of iterable) {
      // fn can be async; await its result
      const out = await fn(v);
      yield out;
    }
  }

  const doubled = asyncMap(countAsync(4), async function (x) {
    // simulate async transform (no real delay for demo)
    return x * 2;
  });

  const collected = [];
  for await (const v of doubled) {
    collected.push(v);
  }
  console.log("doubled async:", collected);
})();
Iteratory asynchroniczne — for await...of i generatory async — ilustracja 5

Dobre praktyki

Wskazówki:

  • for await...of wymaga obiektu asynchronicznie iterowalnego (Symbol.asyncIterator).
  • Używaj async function*, aby łatwo definiować generatory asynchroniczne.
  • Każde next() jest oczekiwane; zadania powinny być krótkie, aby aplikacja pozostała responsywna.
Iteratory asynchroniczne — for await...of i generatory async — ilustracja 6

Quiz: podstawy asynchronicznej iterowalności

Szybkie sprawdzenie: Wymaganie dotyczące asynchronicznie iterowalnych obiektów.

Iteratory asynchroniczne — for await...of i generatory async — ilustracja 7

Podsumowanie

Podsumowanie: Używaj async function* i yield do tworzenia generatorów asynchronicznych. Iteruj za pomocą for await...of albo ręcznie oczekuj na next(). Buduj niewielkie asynchroniczne potoki z pomocniczymi generatorami.

Iteratory asynchroniczne — for await...of i generatory async — ilustracja 8

Często zadawane pytania

Czy lekcja „Iteratory asynchroniczne — for await...of i generatory async” jest bezpłatna?

Tak — pełny tekst „Iteratory asynchroniczne — for await...of i generatory async” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Iteratory asynchroniczne — for await...of i generatory async”?

Używanie generatorów async i for await...of do odbierania wartości pojawiających się w czasie. Poznanie Symbol.asyncIterator i prostych potoków asynchronicznych Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Iteratory asynchroniczne — for await...of i generatory async”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Protokół iterowalności i for...of
  2. Funkcje generatorów, yield i małe potoki
  3. Iteratory asynchroniczne — for await...of i generatory async
← Powrót do JavaScript Academy