6

我正在使用AngularJS Seed,我想查看 Web Worker 的工作实现。

我想让一个简单的 Web Worker 工作以理解它,但我遇到了功能问题。

我在services.js中有 Web Worker 代码,如下所示:

'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;
        }
    };

}]);

js文件夹中,我有一个文件doWork.js,其内容是:

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

我的controllers.js文件是空的,看起来像这样:

'use strict';

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

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


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


}]);

我想要的是查看 Web Worker 的输出。

我使用此设置得到的错误是:

未捕获的类型错误:无法调用未定义的方法“工厂”

4

2 回答 2

2

你有语法错误?

改变

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

/* Services */
var app = angular.module('myApp.services', []);
于 2013-08-09T02:01:27.907 回答
1

您需要有一些东西来解决从您的服务返回的承诺。类似的东西

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

此外,您需要将服务注入到调用该服务的控制器中。

看看这篇文章,了解在 AngularJS 中处理 web worker 的另一种方法。

你可能还想熟悉$qAngularJS 中的 promise 实现

于 2014-10-28T11:48:29.740 回答