Skip to content

Instantly share code, notes, and snippets.

@krisselden
Last active August 25, 2020 19:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krisselden/a747d474e9d4ecc4c4a764dbc870c7f0 to your computer and use it in GitHub Desktop.
Save krisselden/a747d474e9d4ecc4c4a764dbc870c7f0 to your computer and use it in GitHub Desktop.
function createQueue() {
let queue = [];
let i = 0;
let len = 0;
return [
(fn) => (queue[len++] = fn),
() => {
try {
for (; i < len; i++) {
const fn = queue[i];
// release memory
queue[i] = undefined;
fn();
}
} finally {
if (i < len) {
i++;
} else {
len = i = 0; // completed
}
}
},
];
}
const [enqueue, flush] = createQueue();
enqueue(() => console.log("A"));
enqueue(() => console.log("B"));
enqueue(() => {
throw Error("foo");
});
enqueue(() => console.log("C"));
enqueue(() => console.log("D"));
while (true) {
try {
flush();
break;
} catch (e) {
console.log(e);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment