ng-webworker creates dynamic webworkers so angular apps can be multi-threaded.
npm install ng-webworker#ng-webworker
demo and more instructions: http://mattslocum.github.io/ng-webworker/
###Installation for Testing
npm install
###Run Tests
grunt karma
###Build
grunt uglify
#Using ng-webworker
###Include the module
``javascript`
angular.module('demo', ['ngWebworker'])
.controller('demoCtrl', function($scope, Webworker) {});
###Create a basic worker
`javascript
// function that will become a worker
function doubler(num) {
// the return value becomes the resolve of the promise
return num * 2;
}
var myWorker = Webworker.create(doubler);
`
###call the worker function
`javascript`
myWorker.run($scope.value).then(function(result) {
alert("Answer: " + result);
});
##Create an advanced worker
javascript
// function that will become a worker
function async(first, second) {
// api to send a promise notification
notify(first);
// api to resolve the promise. Note: according to the $q spec,
// a promise cannot be used once it has been resolved or rejected.
complete(second);
}// mark this worker as one that supports async notifications
var myWorker = Webworker.create(async, {async: true });
// uses the native $q style notification: https://docs.angularjs.org/api/ng/service/$q
myWorker.run(1, 2).then(function(result) {
// promise is resolved.
alert('done');
}, null, function(progress) {
// promise has a notification
console.log(progress);
);
`$3
#### Global config
`javascript
angular.module('ngWebworker').config(function(WebworkerProvider) {
WebworkerProvider.setHelperPath("/base/src/worker_wrapper.js");
WebworkerProvider.setUseHelper(false);
// transfer ownership doesn't work with the worker_wrapper helper
WebworkerProvider.setTransferOwnership(true);
});
`#### Instance Config
If you want callback style functions on top of the promise or as an alternative style, you can pass callbacks into the config block. These callbacks only work if async is true. When async is false it uses basic resolves when the function returns.
`javascript
var myWorker = Webworker.create(async, {
async: true, // prevent the function return from resolving the promise
useHelper: true/false, // defaults to false for most browsers. defaults to true for IE.
onMessage: function(event) {}, // every event from the worker fires this when async:true
onError: function(event) {}, // error event from the worker
onReturn: function(data) {}, // return value from the function
onComplete: function(data) {}, // data from complete/resolve function
onNotice: function(data) {} // data from notice function
});
``