Stream.forEach în Dart

Cheamă o funcție pentru fiecare valoare din stream și dă un Future care se termină la închiderea stream-ului.

Sintaxă
Future<void> forEach(void action(T element))

Ce face Stream.forEach

forEach este o formă scurtă pentru o buclă await for care doar face ceva cu fiecare valoare. Future-ul returnat se termină când stream-ul se închide, sau cu eroare la prima eroare din stream.

Dacă acțiunea returnează un Future, acesta nu este așteptat. Pentru pași asincroni pe rând folosește await for sau asyncMap.

Parametri

Parametru Descriere
action Funcția chemată cu fiecare valoare.

Ce returnează

Un Future<void>.

Exemple

Exemplul 1: Afișarea fiecărei notificări

Stream<String> notificari() async* {
  for (final n in ['Comanda a fost preluată', 'Curierul este pe drum', 'Comanda a fost livrată']) {
    await Future.delayed(const Duration(milliseconds: 10));
    yield n;
  }
}

Future<void> main() async {
  await notificari().forEach((n) => print('🔔 $n'));
  print('Nu mai sunt notificări.');
}

Rezultat

🔔 Comanda a fost preluată
🔔 Curierul este pe drum
🔔 Comanda a fost livrată
Nu mai sunt notificări.

Exemplul 2: Eroarea oprește forEach

Stream<int> citiri() async* {
  yield 21;
  yield 22;
  throw StateError('senzor defect');
}

Future<void> main() async {
  try {
    await citiri().forEach((t) => print('$t °C'));
  } on StateError catch (e) {
    print('Oprit: ${e.message}');
  }
}

Rezultat

21 °C
22 °C
Oprit: senzor defect

Greșeli frecvente

  • Dai lui forEach o funcție async și te aștepți ca pașii să ruleze pe rând. forEach nu așteaptă future-urile returnate.

Comenzi înrudite

  • Stream.listen: Începe ascultarea unui stream: o funcție pentru fiecare valoare, una pentru erori, una pentru final.
  • await for: Parcurge un Stream element cu element, așteptând fiecare eveniment; se termină când stream-ul se închide.
  • Iterable.forEach: Apelează o funcție pentru fiecare element, în ordine.
  • Future.forEach: forEach rulează o acțiune asincronă pe rând pentru fiecare element; doWhile repetă o acțiune cât timp returnează true.