मैं डार्ट कोणीय 2 में एक वेबपैप विकसित कर रहा हूँ। जब मैं एक फॉर्म जमा करता हूं, तो ब्राउज़र अटक जाता है (प्रक्रिया का समय काफी लंबा हो सकता है)। क्या इसे अतुल्यकालिक रूप से करने का कोई तरीका है?

मेरे पास मेरे टेम्पलेट में है:

 <form (ngSubmit)="onSubmit()"

और संबंधित विधि:

onSubmit() async {
   longProcess();
}

विधि 'longProcess ()' सर्वर को कॉल नहीं करती है। केवल स्थानीय गणना।

आपकी सहायता के लिए धन्यवाद।

1
matth3o 2 जून 2016, 15:18
सर्वर पर कॉल डिफ़ॉल्ट रूप से async हैं। वास्तविक कोड देखे बिना जो दर्शाता है कि आप क्या हासिल करने की कोशिश कर रहे हैं, सुझाव देना मुश्किल है।
 – 
Günter Zöchbauer
2 जून 2016, 15:19
आपके त्वरित उत्तर के लिए धन्यवाद, मैंने अपना प्रश्न अपडेट कर लिया है।
 – 
matth3o
2 जून 2016, 15:25

1 उत्तर

सबसे बढ़िया उत्तर

longProcess() शायद पहले ही एसिंक्स निष्पादित कर चुका है।

समस्या यह है कि ब्राउज़र में केवल एक धागा है। यहां तक ​​​​कि जब कुछ एसिंक संसाधित किया जाता है तो यह उसी थ्रेड में चलता है जो आपकी सभी जावास्क्रिप्ट चलाता है। जब एक कार्य निष्पादित किया जाता है तो कोई अन्य कार्य उसी समय सक्रिय नहीं हो सकता है। यदि आप बड़े कार्य को बहुत से छोटे कार्यों में विभाजित कर सकते हैं और फिर इन छोटे कार्यों को एसिंक्स कह सकते हैं, तो इन छोटे कार्यों में से अगला निष्पादित होने से पहले अन्य प्रतीक्षा कार्य किए जा सकते हैं।

जावास्क्रिप्ट अतिरिक्त बनाने के लिए वेबवर्कर्स का उपयोग कर सकता है। यदि कोड ऐसे वेबवर्कर थ्रेड में चलाया जाता है तो यह मुख्य थ्रेड को अवरुद्ध नहीं करता है।

WebWorkers के बारे में अधिक जानकारी के लिए देखें Angular 2 Dart में वेब वर्कर

1
Community 23 मई 2017, 15:09
1
मैं जोड़ूंगा कि इसे हल करने का एक आसान तरीका await-इंग window.animationFrame है जो आपके कार्य लूप में longProcess() है। मैंने इसे filiph.github.io/markov में किया (देखें "मार्कोव श्रृंखला का निर्माण ब्राउज़र")। यह प्रभावी रूप से गणना को छोटे कार्यों में विभाजित करता है जिसके बारे में गनथर बात कर रहा है।
 – 
filiph
2 जून 2016, 20:33
धन्यवाद, मैं इसे देख लूंगा... वास्तव में मैंने यह चाल अद्भुत कार्य के साथ की Isolate.spawn :)
 – 
matth3o
3 जून 2016, 11:39
और क्या आप उत्पन्न पृथक में HTTP अनुरोध कर सकते हैं?
 – 
Günter Zöchbauer
3 जून 2016, 11:43
यदि आप एंगुलर का उपयोग करते हैं तो आप ऊपर से जुड़े प्रश्न (मेरे उत्तर में) में बताए गए वेबवर्कर दृष्टिकोण का उपयोग कर सकते हैं।
 – 
Günter Zöchbauer
3 जून 2016, 11:44
मैंने कोशिश नहीं की, लेकिन मुझे लगता है कि स्पॉन्डेड आइसोलेट में एचटीपी अनुरोध किए जा सकते हैं। अंत में, आइसोलेट को वेबवर्कर के लिए मैप किया जाता है। मुझे लगता है कि कोणीय दृष्टिकोण के साथ एकमात्र लाभ यह है कि आपके पास विशिष्ट घटकों के लिए वेबवर्कर हो सकते हैं।
 – 
matth3o
3 जून 2016, 12:11