The screenshot API for developers -
Try ScreenshotOne
Skip to content

Event Iterator in Client

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

Basic Usage

ts
const 
iterator
= await
client
.
streaming
()
for await (const
event
of
iterator
) {
console
.
log
(
event
.
message
)
}

Stopping the Stream

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

ts
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

INFO

Unlike traditional SSE, Event Iterators do not retry automatically after an error. To add retries, use the Retry Plugin.

ts
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.

ts
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 consumeEventIterator

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

ts
import { consumeEventIterator } from '@orpc/client'

const cancel = consumeEventIterator(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)

Released under the MIT License.