const worker = new Worker('test.worker.js'); worker.onmessage = (data) => { if(data.eventName === 'someFuncResult') someFunc(); else if(data.eventName === 'someFunc2Result') someFunc2(); }; worker.postMessage({eventName: 'someFunc'});
self.addEventListener('message', (data) => { if(data.eventName === 'someFunc') { doSomeFunc(); self.postMessage('someFuncResult'); } if(data.eventName === 'someFunc2') { doSomeFunc(); self.postMessage('someFunc2Result'); } })
npm install webworker-promise
const WebWorker = require('webworker-promise'); //main-process const WebWorkerRegister = require('webworker-promise/lib/register');
//ping.worker.js const register = require('webworker-promise/lib/register'); register() .operation('ping', (message) => { //message - hello, return 'pong'; });
//main.js const WebWorker = require('webworker-promise'); const worker = new WebWorker(new Worker('ping.worker.js')); worker.exec('ping', 'hello') .then(result => {/* result - pong*/});
register() .operation('hello', ({name, delay}) => { return new Promise((res) => { setTimeout(() => res(`Hello ${name}!`), delay); }); });
worker.exec('hello', {name: 'Bob', delay: 300}) .then(message => {/* message - Hello Bob!*/}); worker.exec('hello', {name: 'Alice', delay: 200}) .then(message => {/* message - Hello Alice!*/});
register() .operation('get-random-text', (limit) => { // fetch return fetch(`https://baconipsum.com/api/?callback=?type=meat-and-filler¶s=${limit}`) .then(result => result.json()) });
const worker = new WebWorker(new Worker('async.worker.js')); worker.exec('get-random-text', 2) .then(texts => {/*texts - */});
worker.exec('get-random-text', 2) .catch(e => {/* e.message, e.stack */});
register() .operation('get-events', (str, emit) => { return new Promise((res) => { // 20, 90 setTimeout(() => emit('progress', 20), 100); setTimeout(() => emit('progress', 90), 200); setTimeout(() => res('hello'), 300); }); });
worker.exec('get-events', '', [], (eventName, progress) => { if(eventName === 'progress') console.log(progress); // progress, 20, 90 }) .then(result => {/*result - hello*/});
register() .operation('send-buffer', (obj) => { // obj.myBuffer; return new register.TransferableResponse({myBuffer}, [myBuffer]); });
worker.exec('send-buffer', {myBuff: myBuffer}, [myBuffer]) .then((obj) => {/* obj.myBuffer */});
register( (name) => `Hello ${name}!`);
worker.postMessage('hello');
Source: https://habr.com/ru/post/337492/
All Articles