How to use a Web Worker in AngularJS?

纵饮孤独 提交于 2020-01-14 08:16:29

问题


I'm using AngularJS Seed and I want to see a working implementation of a Web Worker.

I want to make a simple Web Worker work in order to understand it, but I'm running into an issue with the functionality.

I have the Web Worker code in the services.js like so:

'use strict';

/* Services */
var app = angular.module('myApp.services', []).

app.factory("HelloWorldService",['$q',function($q){

    var worker = new Worker('js/doWork.js');
    var defer;
    worker.addEventListener('message', function(e) {
      console.log('Worker said: ', e.data);
      defer.resolve(e.data);
    }, false);

    return {
        doWork : function(myData){
            defer = $q.defer();
            worker.postMessage(myData); // Send data to our worker. 
            return defer.promise;
        }
    };

}]);

In the js folder I have a file doWork.js and its contents are:

self.addEventListener('message', function(e) {
  self.postMessage(e.data);
}, false);

My controllers.js file is empty and it looks like so:

'use strict';

/* Controllers */
var app = angular.module("myApp.controllers",[]);

app.controller('MyCtrl1', [ '$scope', function($scope) {


}]).controller('MyCtrl2', [ '$scope', function($scope) {


}]);

What I want is to see the output of the Web Worker.

The error I get with this setup is:

Uncaught TypeError: Cannot call method 'factory' of undefined


回答1:


You have a syntax error?

change

/* Services */
var app = angular.module('myApp.services', []).

to

/* Services */
var app = angular.module('myApp.services', []);



回答2:


You need to have something to resolve the promise returned from your service. Something along the lines of

var promise = HelloWorldService.doWork( input );
promise.then( function( allWentGoodMessage ){
    // green path code goes here
}, function( somethingWentBadMessage ){
    // error handling code goes here
} );

Also, you'll need to inject the service into the controller that calls the service.

Take a look at this post for another way of dealing with web workers in AngularJS.

And you might also want to get acquainted with the promise implementation, $q in AngularJS



来源:https://stackoverflow.com/questions/18131971/how-to-use-a-web-worker-in-angularjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!