@johngw/stream
Version:
Reactive programming tools using the WHATWG Streams API.
30 lines (27 loc) • 550 B
text/typescript
/**
* Continuously emits `Date` chunks until cancelled.
*
* @group Sources
* @example
* ```
* interval(1_000)
*
* ------<Date>------<Date>------
* ```
*/
export function interval(ms: number, queuingStrategy?: QueuingStrategy<Date>) {
let timer: number
return new ReadableStream<Date>(
{
start(controller) {
timer = setInterval(() => {
if (controller.desiredSize) controller.enqueue(new Date())
}, ms)
},
cancel() {
clearInterval(timer)
},
},
queuingStrategy
)
}