onmessage = function (event) { handleMessage(event.data); } // message = {type: '', task_id: '', [key: string]: any} function handleMessage(message) { // console.log("new task from master " + JSON.stringify(message)); let type = message['type']; if(type === 'fetch'){ fetchUrl(message.url).then(function (res) { postMessage({ type: 'fetch', task_id: message.task_id, info: JSON.parse(res), }) }); return; } } function processDelay(timeout) { setTimeout(function () { postMessage({ type: 'delay', info: 'Its done! ' + timeout, }) }, timeout) } function fetchUrl(request_url) { return new Promise(function (resolve, reject) { let xhr = new XMLHttpRequest(); xhr.open('GET', request_url, true); xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 300) { resolve(xhr.response); } else { reject('error'); } }; xhr.onerror = function () { reject('error'); }; xhr.send(); }); }