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[]): voidThe **`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)