| // 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(); |
| } |
| } |