UNPKG

web-threads

Version:

generic threads using web workers for the web

40 lines (36 loc) 1.22 kB
'use strict'; function worker () { function getFunctionArguments(fn) { return fn.substring(fn.indexOf("(") + 1, fn.indexOf(")")); } function getFunctionContent(fn) { return fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")); } function worker(params) { var context = params.data[0].context; var fn = params.data[0].fn; var newFunc = new Function(getFunctionArguments(fn), getFunctionContent(fn)); postMessage([newFunc.apply(context, params.data[0].args), context]); } self.onmessage = worker; return worker; } var workerString = worker.toString(); var code = workerString.substring(workerString.indexOf("{") + 1, workerString.lastIndexOf("return")); function execute(param) { return new Promise(function (resolve, reject) { var webWorker = new Worker(URL.createObjectURL(new Blob([code], { type: 'text/javascript' }))); webWorker.onmessage = function (result) { if (param.context) Object.assign(param.context, result.data[1]); resolve(result.data[0]); }; webWorker.onerror = reject; var copy = Object.assign({}, param, { fn: param.fn.toString() }); webWorker.postMessage([copy]); }); } exports.execute = execute;