नया संस्करण
समाधान है कि आप here पा सकते हैं, मैं एक साधारण वर्ग है कि उनके कार्यों को पूरा करने के लिए एक WebWorker का उपयोग निर्माण है के आधार पर।
आप काम करने वाले वर्कर के लिए 3 फाइलों को नेट करते हैं।
फ़ाइल loader.d.ts - फ़ाइलें
declare module "file-loader?name=[name].js!*" {
const value: string;
export = value;
}
पृष्ठभूमि 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;
}
}
}
वेब-वर्कर-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 पर एक नजर डालें।
सम्मान।
स्रोत
2017-03-23 23:15:30
मुझे आपकी एक ही समस्या है। इंटरनेट उपयोग में उदाहरण उलझन में हैं और एनजी मॉड्यूल के कार्यान्वयन से पहले बीटा संस्करण ( – batressc
मुझे यह सरल उदाहरण https://github.com/thelgevold/angular-2-samples/tree/master/components/web-workers मिला है ngModule का उपयोग करता है। –