streamEvents example
Hello guys! I was trying to follow the example from here: https://tanstack.com/start/latest/docs/framework/react/server-functions
import { createServerFn } from '@tanstack/react-start'
export const streamEvents = createServerFn({
method: 'GET',
response: 'raw',
}).handler(async ({ signal }) => {
// Create a ReadableStream to send chunks of data
const stream = new ReadableStream({
async start(controller) {
// Send initial response immediately
controller.enqueue(new TextEncoder().encode('Connection established\n'))
let count = 0
const interval = setInterval(() => {
// Check if the client disconnected
if (signal.aborted) {
clearInterval(interval)
controller.close()
return
}
// Send a data chunk
controller.enqueue(
new TextEncoder().encode(
`Event ${++count}: ${new Date().toISOString()}\n`,
),
)
// End after 10 events
if (count >= 10) {
clearInterval(interval)
controller.close()
}
}, 1000)
// Ensure we clean up if the request is aborted
signal.addEventListener('abort', () => {
clearInterval(interval)
controller.close()
})
},
})
// Return a streaming response
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'keep-alive',
},
})
})import { createServerFn } from '@tanstack/react-start'
export const streamEvents = createServerFn({
method: 'GET',
response: 'raw',
}).handler(async ({ signal }) => {
// Create a ReadableStream to send chunks of data
const stream = new ReadableStream({
async start(controller) {
// Send initial response immediately
controller.enqueue(new TextEncoder().encode('Connection established\n'))
let count = 0
const interval = setInterval(() => {
// Check if the client disconnected
if (signal.aborted) {
clearInterval(interval)
controller.close()
return
}
// Send a data chunk
controller.enqueue(
new TextEncoder().encode(
`Event ${++count}: ${new Date().toISOString()}\n`,
),
)
// End after 10 events
if (count >= 10) {
clearInterval(interval)
controller.close()
}
}, 1000)
// Ensure we clean up if the request is aborted
signal.addEventListener('abort', () => {
clearInterval(interval)
controller.close()
})
},
})
// Return a streaming response
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'keep-alive',
},
})
})What are Server Functions? Server functions allow you to specify logic that can be invoked almost anywhere (even the client), but run only on the server. In fact, they are not so different from an API...
