На самом деле существует метод Stream.asyncExpand
:
streamC = streamA.asyncExpand((event) => streamB(event));
Однако проблема заключается в том, что Поток результатов (streamC
) перейдет к следующему событию в исходном потоке (streamA
), только если подпоток (streamB
) первого события закрыт. В случае, скажем, Cloud Firestore, это никогда не будет работать, потому что подпоток не закроется.
К счастью, есть stream_transform
пакет !
streamC = streamA.concurrentAsyncExpand((event) => streamB(event));
Этот пакет обеспечивает одновременное расширение asyn c. Таким образом, результирующий поток не ожидает закрытия подпотоков.
Однако есть и обратная сторона: предыдущие подпотоки не закрываются автоматически при получении нового события в исходном потоке.
Таким образом, это также не полезно для Cloud Firestore.
Официально в пакете stream_transform
пока нет, однако вы можете используйте мой PR .
streamC = streamA.sequentialAsyncExpand((event) => streamB(event));
Это решает проблему, которую я изложил выше.