2013-01-24 22 views
21

मुझे यह त्रुटि क्यों मिल रही है?असीमित संदर्भ त्रुटि: आयातक परिभाषित नहीं किया गया है

मुझे इस वैश्विक कार्य का सही उपयोग करने में सक्षम होना चाहिए?

http://www.html5rocks.com/en/tutorials/workers/basics/

मैं क्रोम का उपयोग कर रहा

मैं https://code.google.com/p/bitjs/ उपयोग कर रहा हूँ और यह

importScripts('io.js'); 
importScripts('archive.js'); 
+0

आप कार्यकर्ता को कैसे आकर्षित करते हैं? – Bergi

+0

सोचा कि यह एक कार्यकर्ता पैदा करेगा? इस प्रकार वे इसे https://code.google.com/p/bitjs/source/browse/unzip.js – netigger

+0

में उपयोग करते हैं, नहीं, यह एक कार्यकर्ता स्क्रिप्ट के अंदर होना चाहिए। Https://code.google.com/p/bitjs/source/browse/archive.js#278 देखें कि वे इसे कैसे करते हैं, या आपके द्वारा लिंक किए गए ट्यूटोरियल्स का पालन करें – Bergi

उत्तर

10

इस कोड को एक कार्यकर्ता स्क्रिप्ट के अंदर होने की जरूरत है के साथ शुरू होता है। कार्यकर्ता स्वयं एक नई Worker ऑब्जेक्ट के माध्यम से बनाया गया है - Getting Started in the tutorial देखें।

आपके द्वारा लिंक किया गया कोड here पर बनाए गए कार्यकर्ता के अंदर है।

6

मुझे इस त्रुटि का भी सामना करना पड़ा। मेरे मामले में, ऐसा इसलिए है क्योंकि मैं कर्म/जैस्मीन का उपयोग कर कोड का परीक्षण कर रहा हूं। परीक्षण ढांचे के कारण, worker.js फ़ाइल मुख्य थ्रेड द्वारा भी लोड की जाती है।

if('undefined' === typeof window){ 
     importScripts('workerscript2.js'); 
    ... 
    } 

कृपया जो कोई वैकल्पिक समाधान प्रदान करता है रोब द्वारा नीचे टिप्पणी, का संदर्भ लें:

मैं साथ worker.js फ़ाइल wrappig करके इस त्रुटि से बचते रहे।

+0

यह जैस्मीन का उपयोग करते समय एक चालाक कामकाज है। +1 – Liam

+4

इसके बजाए ''function' === टाइप करें आयात करें 'का उपयोग करने पर विचार करें। –

20

जब आप कोई कार्यकर्ता बनाते हैं तो इसे वास्तव में दो बार निष्पादित किया जाता है। पहला पास वैश्विक 'विंडो' ऑब्जेक्ट के संदर्भ में है (जिसका अर्थ है कि आपके पास सभी विंडो ऑब्जेक्ट फ़ंक्शंस तक पहुंच है)। दूसरी कॉल उस कार्यकर्ता के संदर्भ में है जिसमें एक अलग वैश्विक वस्तु है, जहां एक 'आयात' मौजूद है।

// proper initialization 
if('function' === typeof importScripts) { 
    importScripts('script2.js'); 
    addEventListener('message', onMessage); 

    function onMessage(e) { 
    // do some work here 
    }  
} 

सूचना addEventListener अगर बयान के अंदर है। यदि आप इसे इसके बाहर रखते हैं, तो आपका कॉलबैक दो बार पंजीकृत होगा। एक बार 'खिड़की' वैश्विक और एक बार कार्यकर्ता के वैश्विक पर।

हैप्पी कोडिंग!

+3

आपका उत्तर समझ में आता है। क्या आप मुझे दो बार निष्पादन के बारे में और जानने के लिए कुछ लिंक बता सकते हैं। – lokeshjain2008

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