Hyperlinkv0.8.0-beta.28

Channel

Channel.fromAsyncIterableconsteffect/Channel.ts:1687
<A, D, E>(
  iterable: AsyncIterable<A, D>,
  onError: (error: unknown) => E
): Channel<A, E, D>

Creates a channel that pulls values from an AsyncIterable.

Details

Each yielded value is emitted as an output element. The iterator's return value becomes the channel's done value. Thrown or rejected iterator errors are converted with onError. If the channel scope closes early and the iterator has a return method, that method is called.

constructors
Source effect/Channel.ts:168717 lines
export const fromAsyncIterable = <A, D, E>(
  iterable: AsyncIterable<A, D>,
  onError: (error: unknown) => E
): Channel<A, E, D> =>
  fromTransform(Effect.fnUntraced(function*(_, scope) {
    const iter = iterable[Symbol.asyncIterator]()
    if (iter.return) {
      yield* Scope.addFinalizer(scope, Effect.promise(() => iter.return!()))
    }
    return Effect.flatMap(
      Effect.tryPromise({
        try: () => iter.next(),
        catch: onError
      }),
      (result) => result.done ? Cause.done(result.value) : Effect.succeed(result.value)
    )
  }))
Referenced by 1 symbols