WebWorkerの処理を待つ
WebWorkerのEvent ListenerをPromiseに変換して使う
code:js
async function delegateWork({worker, message}) {
const job = new Promise((resolve, reject) =>
worker.addEventListener('message', message => {
resolve(message.data);
}, {once: true}));
worker.postMessage(message);
return await job;
}
これどうやってremoveEventListenerで解除すればいいんだろう?
とりあえず放置
addEventListenerのonce optionを使う
使う時
code:js
const worker = new Worker('...');
const message = {...};
worker.onmessage = (e)=>{...}
const promise = delegateWork({worker,message});
// いろんな処理
const result = await promise; // ここで結果が返ってくるのを待つ
from external-completion-2#5fc7aeb71280f0000026527f
Reference
元ネタ
Web Workersを用いてJavaScriptをマルチスレッド化する
#2021-02-08 00:38:30
#2021-01-15 15:56:18
#2020-12-10 04:52:42