Ce face Stream.fromFuture
Stream.fromFuture(f) emite valoarea (sau eroarea) lui f și apoi se închide; face același lucru ca f.asStream().
Stream.fromFutures(lista) emite rezultatul fiecărui future imediat ce acesta se termină, deci în ordinea terminării, nu în ordinea din listă. Se închide după ultimul. Este bun pentru a arăta rezultatele pe măsură ce vin.
Parametri
| Parametru | Descriere |
|---|---|
future |
Future-ul a cărui valoare este emisă. |
futures |
Future-urile ale căror rezultate sunt emise. |
Ce returnează
Un Stream<T>.
Exemple
Exemplul 1: Rezultate pe măsură ce sosesc
Clujul răspunde primul (20 ms), apoi Iașiul (50 ms), apoi Timișoara (80 ms).
Future<String> prognoza(String oras, int ms) =>
Future.delayed(Duration(milliseconds: ms), () => '$oras: gata în $ms ms');
Future<void> main() async {
final s = Stream.fromFutures([
prognoza('Iași', 50),
prognoza('Timișoara', 80),
prognoza('Cluj', 20),
]);
await for (final r in s) {
print(r);
}
}
Rezultat
Cluj: gata în 20 ms
Iași: gata în 50 ms
Timișoara: gata în 80 ms
Exemplul 2: Un singur future ca stream
Future<void> main() async {
final raspuns = Future.delayed(const Duration(milliseconds: 10), () => 'Comanda #1024 confirmată');
await Stream.fromFuture(raspuns).forEach(print);
}
Rezultat
Comanda #1024 confirmată
Greșeli frecvente
- Crezi că
fromFuturespăstrează ordinea din listă. Pentru rezultate în ordinea listei foloseșteFuture.wait.
Comenzi înrudite
Future.asStream: Transformă un future într-un stream care emite o singură valoare (sau eroarea) și apoi se închide.Future.wait: Future.wait așteaptă mai multe future-uri în paralel și dă lista rezultatelor; Future.any dă primul rezultat terminat.Stream.fromIterable: Creează un stream care emite, pe rând, elementele unei liste sau ale altui Iterable, apoi se închide.