2012-05-14 3 views
15

क्या वेब-वर्कर में नए संदेश की प्रतीक्षा करने या जांचने का कोई तरीका है?वेब-वर्कर में संदेश के लिए सिंक्रनाइज़ रूप से प्रतीक्षा करें

मेरे पास कोड का एक बड़ा जटिल निकाय है (ईएमएसस्क्रिप्टन से संकलित एलएलवीएम) कि मैं कॉलबैक के आसपास रिफैक्टर नहीं कर सकता।

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

+0

यदि आपकी ईसीएमएस्क्रिप्ट एक 'भाषा-निरंतरता' के साथ योजना के रूप में समृद्ध भाषा है तो आपकी समस्या का समाधान होगा। यह आपको वर्तमान निरंतरता को पकड़ने और इसे अपने 'ऑनमेज' हैंडलर में फिर से कॉल करने की अनुमति देगा। – Marc

उत्तर

0

नहीं, दुर्भाग्य से। अभिभावक पृष्ठ से संदेश पर अवरुद्ध करने का एक तरीका जोड़ने का कुछ चर्चा हुई, लेकिन यह कहीं भी नहीं गई। मैं देखूंगा कि क्या मैं प्रासंगिक मेलिंग सूची धागा खोद सकता हूं।

1

क्या आप बिना अनुक्रम के अनुक्रम के अनुक्रम को तोड़ सकते हैं?

wrk.onmessage = function(e) { 
    if (e.data.step === 'initial input') { 
     doInitialWork(e.data.inputs) 
    } else if (e.data.step === 'ui input') { 
     doTheRest(e.data.uiData) 
    } 
} 

onmessage घटना अवरुद्ध हो जाएगा जब तक प्रारंभिक कदम निष्पादन ढेर पूरा हो गया है और महत्वपूर्ण ui बिट्स केवल शुभारंभ करेंगे जब और अगर जानकारी उपलब्ध है।

0

ऐसा करने के लिए एक क्रूड हैक एक सिंक्रोनस एपीआई का उपयोग करना हो सकता है, जैसे कि फाइलसिस्टम एपीआई, और सिंक्रनाइज़िंग तंत्र के रूप में एक अस्थायी फ़ाइल का उपयोग करें।

आपके उदाहरण में, ईएमएसक्रिप्ट कोड एक फ़ाइल पर एक सिंक्रोनस पठन जारी कर सकता है, जबकि यूआई थ्रेड एक ही फाइल को लिखता है, प्रभावी ढंग से कार्यकर्ता को अनब्लॉक कर देता है।

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