2013-08-08 12 views
6

मैं का उपयोग कर रहा हूं और मैं एक वेब वर्कर का कार्य कार्यान्वयन देखना चाहता हूं।AngularJS में वेब वर्कर का उपयोग कैसे करें?

मैं इसे समझने के लिए एक सरल वेब वर्कर काम करना चाहता हूं, लेकिन मैं कार्यक्षमता के साथ किसी समस्या में भाग रहा हूं।

मैं services.js इसलिए की तरह में वेब कर्मचारी कोड है:

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

मेरा नियंत्रक.जेएस फ़ाइल खाली है और ऐसा लगता है:

'use strict'; 

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

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


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


}]); 

मैं जो चाहता हूं वह वेब वर्कर के आउटपुट को देखना है।

त्रुटि मैं इस सेटअप के साथ मिलता है:

Uncaught TypeError: विधि कॉल नहीं कर सकता अपरिभाषित

उत्तर

2

आपने एक सिंटैक्स त्रुटि है 'कारखाना'?

परिवर्तन

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

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

मैं, कि त्रुटि ठीक धन्यवाद! अब कोई त्रुटि नहीं है, लेकिन मुझे अभी भी मेरे वेब वर्कर से संदेश नहीं दिखाई देता है। कंसोल में कुछ भी पॉप अप नहीं करता है जो सत्यापित करेगा कि वेब वर्कर ने कुछ किया है। – acudars

+5

क्या आपने कार्यकर्ता को कुछ भी करने के लिए कहा है? यह बस बैठे और आपके लिए इंतजार कर रहा है। आपको अपने $ HelloWorldService को नियंत्रक में इंजेक्ट करने की आवश्यकता है और $ HelloWorldService.doWork ("कुछ") पर कॉल करें। 'app.controller ('MyCtrl1', [ '$ गुंजाइश', '$ HelloWorldService', समारोह ($ गुंजाइश, $ HelloWorldService) { $ HelloWorldService.doWork (" कुछ "); }])। नियंत्रक ('MyCtrl2', ['$ स्कोप', फ़ंक्शन ($ स्कोप) { }]; '' – coreyb

1

आप वादा हल करने के लिए कुछ करने की जरूरत है आपकी सेवा से लौट आए।

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

के साथ कुछ भी, आपको सेवा को कॉल करने वाले नियंत्रक में सेवा इंजेक्ट करने की आवश्यकता होगी।

AngularJS में वेब श्रमिकों से निपटने के किसी अन्य तरीके के लिए this post पर एक नज़र डालें।

और तुम भी वादा कार्यान्वयन से परिचित पाने के लिए चाहते हो सकता है, $q in AngularJS

संबंधित मुद्दे