Polling
Polling example
Demonstrates infinite polling. The client sends i
parameter to the server, the server increments it and streams the result back to the client. After 10 iterations, the server ends the response and the client starts polling again. Open devtools to see the network requests.
Result
Poll ticker
0
Code
1import { get, prefix } from 'vovk';
2import { withZod } from 'vovk-zod';
3import { z } from 'zod/v4';
4
5@prefix('poll')
6export default class PollController {
7 @get()
8 static streamPollResponse = withZod({
9 query: z.object({
10 i: z.string(),
11 }),
12 iteration: z.object({
13 i: z.number(),
14 }),
15 async *handle(req) {
16 let i = parseInt(req.vovk.query().i);
17 let k = 0;
18 while (true) {
19 yield { i: i++ };
20 await new Promise((resolve) => setTimeout(resolve, 1000));
21 if (++k >= 10) {
22 break;
23 }
24 }
25 },
26 });
27}
1import { get, prefix } from 'vovk';
2import { withZod } from 'vovk-zod';
3import { z } from 'zod/v4';
4
5@prefix('poll')
6export default class PollController {
7 @get()
8 static streamPollResponse = withZod({
9 query: z.object({
10 i: z.string(),
11 }),
12 iteration: z.object({
13 i: z.number(),
14 }),
15 async *handle(req) {
16 let i = parseInt(req.vovk.query().i);
17 let k = 0;
18 while (true) {
19 yield { i: i++ };
20 await new Promise((resolve) => setTimeout(resolve, 1000));
21 if (++k >= 10) {
22 break;
23 }
24 }
25 },
26 });
27}
1import { get, prefix } from 'vovk';
2import { withZod } from 'vovk-zod';
3import { z } from 'zod/v4';
4
5@prefix('poll')
6export default class PollController {
7 @get()
8 static streamPollResponse = withZod({
9 query: z.object({
10 i: z.string(),
11 }),
12 iteration: z.object({
13 i: z.number(),
14 }),
15 async *handle(req) {
16 let i = parseInt(req.vovk.query().i);
17 let k = 0;
18 while (true) {
19 yield { i: i++ };
20 await new Promise((resolve) => setTimeout(resolve, 1000));
21 if (++k >= 10) {
22 break;
23 }
24 }
25 },
26 });
27}
1import { get, prefix } from 'vovk';
2import { withZod } from 'vovk-zod';
3import { z } from 'zod/v4';
4
5@prefix('poll')
6export default class PollController {
7 @get()
8 static streamPollResponse = withZod({
9 query: z.object({
10 i: z.string(),
11 }),
12 iteration: z.object({
13 i: z.number(),
14 }),
15 async *handle(req) {
16 let i = parseInt(req.vovk.query().i);
17 let k = 0;
18 while (true) {
19 yield { i: i++ };
20 await new Promise((resolve) => setTimeout(resolve, 1000));
21 if (++k >= 10) {
22 break;
23 }
24 }
25 },
26 });
27}
1'use client';
2import { useEffect, useState } from 'react';
3import { PollRPC } from 'vovk-client';
4
5export default function PollExample() {
6 const [tick, setTick] = useState(0);
7 useEffect(() => {
8 void (async () => {
9 let i = 0;
10 while (true) {
11 using iterable = await PollRPC.streamPollResponse({
12 query: { i: i.toString() },
13 });
14
15 for await ({ i } of iterable) {
16 setTick(i);
17 }
18
19 i++; // update it to send on the next "while" loop iteration
20 }
21 })();
22 }, []);
23
24 return (
25 <div>
26 <p>Poll ticker</p>
27 <h2>{tick}</h2>
28 </div>
29 );
30}
1'use client';
2import { useEffect, useState } from 'react';
3import { PollRPC } from 'vovk-client';
4
5export default function PollExample() {
6 const [tick, setTick] = useState(0);
7 useEffect(() => {
8 void (async () => {
9 let i = 0;
10 while (true) {
11 using iterable = await PollRPC.streamPollResponse({
12 query: { i: i.toString() },
13 });
14
15 for await ({ i } of iterable) {
16 setTick(i);
17 }
18
19 i++; // update it to send on the next "while" loop iteration
20 }
21 })();
22 }, []);
23
24 return (
25 <div>
26 <p>Poll ticker</p>
27 <h2>{tick}</h2>
28 </div>
29 );
30}
1'use client';
2import { useEffect, useState } from 'react';
3import { PollRPC } from 'vovk-client';
4
5export default function PollExample() {
6 const [tick, setTick] = useState(0);
7 useEffect(() => {
8 void (async () => {
9 let i = 0;
10 while (true) {
11 using iterable = await PollRPC.streamPollResponse({
12 query: { i: i.toString() },
13 });
14
15 for await ({ i } of iterable) {
16 setTick(i);
17 }
18
19 i++; // update it to send on the next "while" loop iteration
20 }
21 })();
22 }, []);
23
24 return (
25 <div>
26 <p>Poll ticker</p>
27 <h2>{tick}</h2>
28 </div>
29 );
30}
1'use client';
2import { useEffect, useState } from 'react';
3import { PollRPC } from 'vovk-client';
4
5export default function PollExample() {
6 const [tick, setTick] = useState(0);
7 useEffect(() => {
8 void (async () => {
9 let i = 0;
10 while (true) {
11 using iterable = await PollRPC.streamPollResponse({
12 query: { i: i.toString() },
13 });
14
15 for await ({ i } of iterable) {
16 setTick(i);
17 }
18
19 i++; // update it to send on the next "while" loop iteration
20 }
21 })();
22 }, []);
23
24 return (
25 <div>
26 <p>Poll ticker</p>
27 <h2>{tick}</h2>
28 </div>
29 );
30}
Last updated on