Общение с веб-рабочими происходит через механизм обмена сообщениями. Перехват этих сообщений происходит при обратном вызове. В AngularJS лучшее место для размещения веб-рабочего - это услуга, которую вы должным образом заметили. Лучший способ справиться с этим - использовать обещания, с которыми Угловая работает удивительно.
Вот пример webworker
в service
var app = angular.module("myApp",[]);
app.factory("HelloWorldService",['$q',function($q){
var worker = new Worker('doWork.js');
var defer = $q.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;
}
};
});
Теперь независимо от того, какая внешняя сущность, обращающаяся к службе Hello World, не нуждается в деталях реализации HelloWorldService
- HelloWorldService
, вероятно, обработал данные по web worker
, над http
или выполнил бы обработку прямо там.
Надеюсь, это имеет смысл.