JSFiddle - React, Tailwind, and code Playground
JavaScript
async function wait(ms) {
return new Promise(r=>setTimeout(r, ms))
}
async function* asynDataStreamOrGenerator() {
for (let i = 0; i < 100; ++i) {
await wait(30)
yield i;
}
}
async function* iterate_until(generator, timeout) {
let timer = wait(timeout).then(_=>Promise.reject("TimeOut"))
for (;;) {
let it = generator.next()
let result = await Promise.race([timer, it])
if (result.done) break;
yield result.value;
}
}
{(async () => {
try {
for await (let t of iterate_until(asynDataStreamOrGenerator(), 1000)) {
console.log(t)
}
} catch (e) { /* catch timeout, rethrow if needed*/ }
})()}