0Pricing
Dart Academy · Урок

Прослушивание с await for

Чтение событий по мере их поступления

«Прослушивание с await for» — бесплатный урок Dart Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Что такое поток

Поток — это последовательность значений, поступающих со временем, а не одновременно. Представьте его как Future, который может предоставить много результатов вместо одного.

Потоки и Future

Future возвращает одно значение позже. Stream передаёт целую последовательность событий одно за другим, пока не сообщит, что завершил работу. 🌊

Знакомство с await for

Цикл await for читает события из потока по мере их поступления. На каждой итерации цикла Вы получаете следующее значение, выдаваемое потоком.

await for (final value in stream) {
  print(value);
}

Он должен выполняться в async

Поскольку await for приостанавливается в ожидании событий, он работает только внутри функции, помеченной как async. Функция приостанавливается, пока не будет готово следующее значение.

Future<void> show(Stream<int> s) async {
  await for (final n in s) print(n);
}

Поток для прослушивания

Вы можете быстро создать поток с помощью Stream.fromIterable. Он выдаёт каждый элемент списка по порядку — это удобно для проверки await for.

final stream = Stream.fromIterable([1, 2, 3]);

Обработка событий в цикле

Свяжите этот поток с await for, и цикл выполнится один раз для каждого выданного значения. В этом примере он выводит сначала 1, затем 2 и 3.

await for (final n in Stream.fromIterable([1, 2, 3])) {
  print(n);
}

Ожидание между событиями

Реальные потоки часто делают паузы между событиями. С await for Ваш код просто ждёт во время этих пауз и возобновляет работу сразу после поступления следующего значения. ⏳

final ticks = Stream.periodic(
    Duration(seconds: 1), (i) => i);

Цикл завершается естественным образом

Когда поток заканчивает отправлять события, он посылает сигнал done. Цикл await for завершается сам, а функция продолжает работу после него.

await for (final n in finiteStream) print(n);
print('Stream finished');

Ошибки доходят до цикла

Если поток выдаёт error, эта ошибка возникает непосредственно в строке await for. Вы можете обернуть цикл в try/catch, чтобы корректно обработать её.

try {
  await for (final n in maybeFails) print(n);
} catch (e) {
  print('Caught: $e');
}

break отменяет прослушивание

Использование break внутри await for останавливает цикл и без лишних действий отменяет подписку на поток. Вы больше не получаете оставшиеся события.

await for (final n in stream) {
  if (n > 100) break;
}

Только один прослушиватель

Цикл await for подписывается на поток с одной подпиской. Такой поток можно прочитать только один раз, поэтому второй цикл вызовет ошибку.

Быстрая проверка

Проверьте, что Вы знаете об await for.

Итоги

Вы узнали, что Stream выдаёт множество значений с течением времени, а await for считывает их по одному внутри async-функции до сигнала done. Отличная работа! 🎉

Часто задаваемые вопросы

Урок «Прослушивание с await for» бесплатный?

Да — полный текст урока «Прослушивание с await for» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Прослушивание с await for»?

Чтение событий по мере их поступления Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Прослушивание с await for»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Прослушивание с await for
  2. Одноразовые и широковещательные потоки
  3. Преобразование потоков: map, where, take
  4. Создание потоков с async*
← Назад к Dart Academy