Skip to content
oRPC
Esc
navigateopen⌘Jpreview
On this page

AsyncIteratorObject in Client

Consume an AsyncIteratorObject like an AsyncGenerator. Await the call, then iterate over events as they arrive.

Basic Usage

const 
const iterator: AsyncIteratorClass<{
    message: string;
}, unknown, void>
iterator
= await
const client: {
    streaming: ProcedureContractClient<object, InitialInputSchema, Schema<AsyncIteratorObject<{
        message: string;
    }, unknown, void>, AsyncIteratorClass<{
        message: string;
    }, unknown, void>>, object>;
}
client
.
streaming: Client
(input?: void | undefined, options?: FriendlyClientOptions<object> | undefined) => PromiseWithError<AsyncIteratorClass<{
    message: string;
}, unknown, void>, Error>
streaming
()
for await (const
const event: {
    message: string;
}
event
of
const iterator: AsyncIteratorClass<{
    message: string;
}, unknown, void>
iterator
) {
var console: Consoleconsole.Console.log(...data: any[]): void
The **`console.log()`** static method outputs a message to the console. [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/log_static)
log
(
const event: {
    message: string;
}
event
.message: stringmessage)
}

Stopping the Stream

Use an AbortSignal or call .return to stop the iterator.

const controller = new AbortController()
const iterator = await client.streaming(undefined, { signal: controller.signal })

// Stop the stream after 1 second
setTimeout(async () => {
  controller.abort()

  // Or call `await iterator.return()` if you already have the iterator instance.
}, 1000)

for await (const event of iterator) {
  console.log(event.message)
}

Error Handling

const iterator = await client.streaming()

try {
  for await (const event of iterator) {
    console.log(event.message)
  }
}
catch (error) {
  if (error instanceof ORPCError) {
    // Handle the error here
  }
}

Event Metadata

Use getEventMeta to read event metadata for each item, such as the event ID and retry interval.

import { getEventMeta } from '@orpc/client'

const iterator = await client.streaming()

for await (const event of iterator) {
  const meta = getEventMeta(event)
  console.log(event.message, meta?.id, meta?.retry)
}

Using consumeAsyncIterator

Use consumeAsyncIterator to consume an AsyncIterator with lifecycle callbacks. It accepts either an iterator or a promise that resolves to one.

import { consumeAsyncIterator } from '@orpc/client'

const cancel = consumeAsyncIterator(client.streaming(), {
  onEvent: (event) => {
    console.log(event.message)
  },
  onError: (error) => {
    console.error(error)
  },
  onSuccess: (value) => {
    console.log(value)
  },
  onFinish: (state) => {
    console.log(state)
  },
})

setTimeout(async () => {
  // Stop the stream after 1 second
  await cancel()
}, 1000)

Last updated on August 6, 2026

Was this page helpful?