概述双向通信可用于任务分发与状态回传。本文给出最小实现。页面端建立通道async function connectSW() {

const reg = await navigator.serviceWorker.ready;

const mc = new MessageChannel();

reg.active.postMessage({ type: 'connect' }, [mc.port2]);

mc.port1.onmessage = e => { console.log('result', e.data); };

mc.port1.postMessage({ type: 'batch', items: [1,2,3] });

}

SW 端接入与分发let port;

self.addEventListener('message', e => {

if (e.data && e.data.type === 'connect' && e.ports && e.ports[0]) {

port = e.ports[0];

port.onmessage = ev => {

if (ev.data.type === 'batch') {

const out = ev.data.items.map(x => x * 2);

port.postMessage({ ok: true, out });

}

};

}

});

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部