[#] Учим webworkers хорошим манерам
habrabot(difrex,1) — All
2017-09-10 00:00:04


Рано или поздно у каждого кто работал с webworkers возникает ситуация когда код превращается в кашу вроде этого:

**main.js**
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'});

**test.worker.js**
self.addEventListener('message', (data) => {
if(data.eventName === 'someFunc') {
doSomeFunc();
self.postMessage('someFuncResult');
}

if(data.eventName === 'someFunc2') {
doSomeFunc();
self.postMessage('someFunc2Result');
}
})


Если даже закрыть глаза на нечитаемый код, вы можете обнаружить, что не можете одновременно несколько раз запустить одну функцию, так, чтобы вызовы не конфликтовали.
После долгих мучений и страшного кода, было решено реализовать удобную обертку над воркерами.

Цели:
— Читаемость кода
— Конкурентные запросы
— Ассинхронные функции
— Прозрачная обработка ошибок
— Возможность отправки промежуточных результатов выполнения процедуры
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/337492/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut