ngx-web-worker
v8.0.0
Published
[Web worker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) service for [Angular](https://angular.io).
Downloads
895
Readme
What is this?
Web worker service for Angular.
Install
npm i ngx-web-worker
API
export interface IWebWorkerService {
run<T>(workerFunction: (any) => T, data?: any): Promise<T>;
runUrl(url: string, data?: any): Promise<any>;
terminate<T>(promise: Promise<T>): Promise<T>;
}
run
workerFunction
:Must be a self-contained function. Cannot reference outside variables.
You can import other libraries with
importScripts
thoughThese are okay:
run(input => input * input, 10); run(input => { const square = num => num * num; return square(input); }, 10); const someFunction = (input) => input * input); run(someFunction, 10); class Runner { private webWorkerService = new WebWorkerService(); constructor() { this.webWorkerService.run(this.someFunction, 10); } someFunction() { return input * input; } }
These will probably NOT work:
// this is not okay because inside the context of the web worker `this` is not the same `this` as here. run(input => this.square(input), 10); // this is not okay because `_` doesn't exist in the web worker context (assuming tht `_` is available here to begin with) run(input => { return _.uniqueId() * input; }, 10);
data
: serializable data
runUrl
: Basically the same asurl
: The url you would use to create aWorker
instancedata
: Same as therun
method
terminate
: Calling this willterminate
the web worker, if it is still running.promise
: ThePromise
instance returned byrun
orrunUrl
.
Example
Check out ngx-web-worker-example for a
sample project, or see app/app.component.ts
for usage with an Angular
application.
export class AppComponent implements OnInit {
constructor(private _webWorkerService: WebWorkerService) {
}
ngOnInit() {
const input = 100;
const promise = this._webWorkerService.run(this.someCPUHeavyFunction, input);
promise.then(result => console.log(result));
}
someCPUHeavyFunction (input) {
return input * 10;
}
}