JSFiddle - React, Tailwind, and code Playground
by Rolf
JavaScript
console.clear();
console.log("Start");
let startTime = Date.now();
async function delay(millisecs) {
console.log("Wait " + millisecs + "ms");
return new Promise((res,rej) => setTimeout(res, millisecs));
}
async function* tickSequence(start, end) {
let counter = start;
let numbers = [];
let resolver = null;
let interval = setInterval(handleTick, 500);
function handleTick() {
console.log(" tick after " + (Date.now() - startTime));
numbers.push(counter);
if (counter >= end) clearInterval(interval);
if (resolver) resolver(counter);
counter++;
}
while (interval >= 0) {
if (numbers.length == 0)
{
await new Promise((resolve, reject) => {
resolver = resolve;
});
}
console.log(numbers.length + " nums in cache");
yield numbers.shift();
}
}
async function readSequence(sequence) {
for await (let seq of sequence) {
console.log((Date.now() - startTime) + " - Seq: " + seq);
await delay(300 + 400*Math.random());
console.log("go on");
}
}
const sequence = tickSequence(1, 15);
readSequence(sequence);