2016-10-08 23 views
5

वेबकर्स के अंदर पूरे एप्लिकेशन को चलाने के लिए कोणीय 2 फोकस में वेबवर्कर्स के बारे में सभी लेख और मार्गदर्शिकाएं मिल सकती हैं। क्या वेबवर्कर्स का उपयोग करने वाली केवल एक ही सेवा बनाना संभव है?कोणीय 2 वेबवर्कर्स

वेबवर्कर्स के शास्त्रीय उदाहरण के अनुसार, क्या कोई मुझे दिखा सकता है कि वेबवर्कर्स का उपयोग करके संख्या के फैक्टोरियल की गणना करने वाली सेवा कैसे बनाई जाए?

+1

मुझे आपकी एक ही समस्या है। इंटरनेट उपयोग में उदाहरण उलझन में हैं और एनजी मॉड्यूल के कार्यान्वयन से पहले बीटा संस्करण ( – batressc

+1

मुझे यह सरल उदाहरण https://github.com/thelgevold/angular-2-samples/tree/master/components/web-workers मिला है ngModule का उपयोग करता है। –

उत्तर

2

नया संस्करण

समाधान है कि आप here पा सकते हैं, मैं एक साधारण वर्ग है कि उनके कार्यों को पूरा करने के लिए एक WebWorker का उपयोग निर्माण है के आधार पर।

आप काम करने वाले वर्कर के लिए 3 फाइलों को नेट करते हैं।

  1. फ़ाइल loader.d.ts - फ़ाइलें

    declare module "file-loader?name=[name].js!*" { 
        const value: string; 
        export = value; 
    } 
    
  2. पृष्ठभूमि worker.ts WebWorker लोड करने के लिए की जरूरत है - अपने आवेदन में वर्ग उपलब्ध

    import * as workerPath from "file-loader?name=[name].js!./web-worker-example"; 
    
    
    class BackgroundWorker { 
    
        constructor() { 
         let worker = new Worker(workerPath); 
         worker.onmessage = this.handleMessage; 
         worker.postMessage('Caller: Help Me for background Work'); 
    
         // Message content can contain only Javascript Objects 
         // 
         // For Documentation: 
         // https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage 
         // 
        } 
    
        private handleMessage(this: Worker, message: MessageEvent) { 
    
         console.log(message.data); 
    
         switch(message.data) { 
         case 'Worker: Working': 
          // ... Something To Do ... 
          break; 
         case 'Worker: Ok, I will Do It': 
          // ... Something To Do ... 
          break; 
         case 'Worker: No, I can not': 
          // ... Something To Do ... 
          break; 
         case 'Worker: Done': 
          this.terminate(); 
          break; 
         } 
        } 
    } 
    
  3. वेब-वर्कर-example.ts

    // ****************************************************************** Worker Bridge 
    // self is a keyword: Reference to this Worker 
    self.onmessage = bridge; 
    
    function bridge(message: MessageEvent) { 
        HandleWork(message.data); 
        CallBack('Done'); 
        // use: 
        //  self.close(); 
        // if you need to terminate worker from Worker Environment. 
    } 
    
    function CallBack(message: string) { 
        self.postMessage('Worker: ' + message, undefined); 
    } 
    
    // ****************************************************************** Worker Body 
    function HandleWork(workTask: string) { 
        if(workTask == 'Caller: Help Me for background Work') { 
         CallBack('Ok, I will Do It'); 
    
         DoVeryComplexWork(); 
         return; 
        } 
    
        CallBack('No, I can not'); 
    } 
    
    function DoVeryComplexWork() { 
    
        // ... Something To Do ... 
    
        // Example: 
        for(let i: number = 0; i < 1000000000; i++) { 
         if(i % 100000000 == 0) { 
          CallBack('Working'); 
         } 
        } 
    } 
    

कार्यकर्ता शुरू करने के लिए, बस कार्यकर्ता new BackgroundWorker() का दृष्टांत और कंसोल पर एक नज़र डालें।

पुराने संस्करण

मैं अपने एक ही समस्या थी और एक सेवा है जो WebWorker के एक वर्ग का विस्तार का निर्माण करके इसे हल। प्रैक्टिस में सेवा वेबवर्कर को दो चीजें, डेटा और एक फ़ंक्शन जो डेटा को विस्तृत करती है, से गुजरकर काम करती है।

मैंने गिटहब पर एक उदाहरण पोस्ट किया। सभी आवश्यक तर्क निम्नलिखित दो फाइलों में हैं।

fibonacci-worker.service.ts

worker.ts

कॉल तरीकों के लिए app.component.ts पर एक नजर डालें।

सम्मान।