2013-04-30 10 views
23

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

मुख्य HTML फ़ाइल में:

<script> 
var w = new Worker("script1.js"); 
w.addEventListener("message", function(e){ 
    alert(e.data); 
}) 
w.postMessage(); 
</script> 

script1.js में:

self.addEventListener("message", function(e){ 
    var a = 5; 
    importScripts("script2.js"); 
    self.postMessage(a); 
}) 

script2.js में:

a = 6 
मैं इस बहुत ही सरल स्थिति के लिए समस्या को संकुचित होता

मैं 6 प्रदर्शित करने वाला एक संवाद देखना चाहता हूं, क्योंकि script2.js आयात करके 5 से 6 में बदला गया था, लेकिन संवाद 5 दिखाता है। मुझे यहां क्या समझ नहीं आ रहा है?

+0

सका importScripts ("script2" .js ") के बाद लाइन; -> self.postMessage (ए); अब सही आत्म का जिक्र नहीं कर रहा है क्योंकि आपने इसे आयात किया है? –

उत्तर

27

फ़ंक्शन में var a का उपयोग करना मतलब है कि a हमेशा निजी रहेगा। importScripts adds to the global scope के बाद, जेएस a पोस्ट करने वाले फ़ंक्शन में अधिक स्थानीयकृत a तक पहुंचने के लिए पसंद करता है। आप इसके बजाय self.a पोस्ट कर सकते हैं, जैसा कि आप उम्मीद करते हैं 6 होगा।

संपादित करें: किसी ने हाल ही व्यक्ति में इस बारे में मुझसे पूछा, तो मैं व्यवहार स्पष्ट करने के लिए एक डेमो बनाया: http://pagedemos.com/importscript/

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