You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In a spiritual follow-up to #18, it would be nice to have flattening operations on async generators.
asyncGeneratorFlat would transform AsyncGenerator<AsyncGenerator<T, ...>> into AsyncGenerator<T>, and asyncGeneratorFlatMap (arguably more powerful) would iterate over AsyncGenerator<A, ...> with mapper function (A, ...) => AsyncGenerator<B, ...> and produce AsyncGenerator<B, ...>.
This can be especially powerful with a similar ordered: false flag, allowing for earliest-first yield at nested levels - a behavior that is not achievable via flat (nor reduction via trivial chaining of produced generators).
Those functions can be useful when aggregating 2nd layer nested data mapped 1:N to 1st layer which is also mapped 1:N to the outer data, in an asynchronous iterable manner (combine that with gRPC streams or websockets, and you can see how it can be used on the web). For example, in a data structure that lists boxes stored in every room in one data source, and the rooms in a house in a different data source, asyncGeneratorFlatMap can be used to obtain an unordered stream of all boxes in a house (presumably the 'stored in' and 'part of' relations are stored as distinct elements for every pair, with additional metadata, and retrieving them as a stream individually is more efficient than retrieving the whole block).
The text was updated successfully, but these errors were encountered:
In a spiritual follow-up to #18, it would be nice to have flattening operations on async generators.
asyncGeneratorFlat
would transformAsyncGenerator<AsyncGenerator<T, ...>>
intoAsyncGenerator<T>
, andasyncGeneratorFlatMap
(arguably more powerful) would iterate overAsyncGenerator<A, ...>
with mapper function(A, ...) => AsyncGenerator<B, ...>
and produceAsyncGenerator<B, ...>
.This can be especially powerful with a similar
ordered: false
flag, allowing for earliest-first yield at nested levels - a behavior that is not achievable viaflat
(nor reduction via trivial chaining of produced generators).Those functions can be useful when aggregating 2nd layer nested data mapped
1:N
to 1st layer which is also mapped1:N
to the outer data, in an asynchronous iterable manner (combine that with gRPC streams or websockets, and you can see how it can be used on the web). For example, in a data structure that lists boxes stored in every room in one data source, and the rooms in a house in a different data source,asyncGeneratorFlatMap
can be used to obtain an unordered stream of all boxes in a house (presumably the 'stored in' and 'part of' relations are stored as distinct elements for every pair, with additional metadata, and retrieving them as a stream individually is more efficient than retrieving the whole block).The text was updated successfully, but these errors were encountered: