JSFiddle - React, Tailwind, and code Playground
HTML
An alert should show up.
<br>
See <a href="http://stackoverflow.com/a/10372280/938089">How to create a Web Worker from a string</a>
JavaScript
var goodWorker = webwork(function (data) {
return "!!" + data + "!!";
});
var badWorker = webwork(function (data) {
return "!!" + data + imNotDefined + "!!";
});
goodWorker("Test123", function(err, result) {
if (err) return alert("goodWorker Errored with " + err.message);
alert("first goodWorker returned with " + result);
});
goodWorker("Test123", function(err, result) {
if (err) return alert("goodWorker Errored with " + err.message);
alert("second goodWorker returned with " + result);
});
badWorker("Test456", function(err, result) {
if (err) return alert("badWorker Errored with " + err.message);
alert("badWorker returned with " + result);
});
alert("Since webworkers are async this should happen first.\nThe callbacks may fire in any order");
function webwork(callback) {
// URL.createObjectURL
window.URL = window.URL || window.webkitURL;
// "Server response", used in all examples
var response = "onmessage=function(event){postMessage(" + callback + "(event.data));}";
var blob;
try {
blob = new Blob([response], {type: 'application/javascript'});
} catch (e) { // Backwards-compatibility
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
blob = new BlobBuilder();
blob.append(response);
blob = blob.getBlob();
}
return function() {
var worker = new Worker(URL.createObjectURL(blob));
var args = Array.prototype.slice.call(arguments);
var callback
var ran;
if (typeof args[args.length - 1] === 'function') {
callback = args.pop();
} else {
callback = function() {};
}
worker.onmessage = function(e) {
if (ran) { return; }
ran = true;
callback(null, e.data);
};
worker.onerror = function(e) {
if (ran) { return; }
ran = true;
...