Source code

Revision control

Copy as Markdown

Other Tools

// Return a generator containing the worker's message.
//
// Usage:
// const worker = new SharedWorker(...);
// const nextMessage = worker_message_generator(worker);
// const msg_1 = await nextMessage();
// const msg_2 = await nextMessage();
// const msg_3 = await nextMessage();
function worker_message_generator(shared_worker) {
const buffer = [];
let resolve = null;
shared_worker.port.onmessage = message => {
buffer.push(message.data);
if (resolve) {
resolve();
}
}
shared_worker.port.start();
return async function() {
if (buffer.length != 0) {
return buffer.shift();
}
await new Promise(r => resolve = r);
return buffer.shift();
}
}