यह जावास्क्रिप्ट के साथ एक आम समस्या है। जावास्क्रिप्ट कोड निरंतर उत्तीर्ण शैली में लिखा जाना चाहिए। यह कष्टप्रद है, लेकिन ऐसा कुछ है जिसे आप बहुत ज्यादा सोचने के बिना परिवर्तित कर सकते हैं।
मूल रूप से, जब भी हम जैसे
var x = someSyncFunction(a, b, c);
//do something with x
console.log(x);
कुछ होता है हम इसे async कोड में समारोह एक निरंतरता समारोह में रिटर्न के बाद सभी कोड बनाने और की एक पैरामीटर में एक चर से एक्स बदल कर परिवर्तित कर सकते हैं निरंतरता कॉलबैक।
someAsyncFunction(a, b, c, function(x){
//do something with x;
console.log(x);
});
आप बाहर देखने के लिए है कि इसके बहुत आसान भ्रामक कोड लिखने के लिए की है। ध्यान में रखने के लिए एक अच्छी चाल यह है कि आप अपने स्वयं के कार्यों को कॉलबैक भी प्राप्त कर सकते हैं। इससे उन्हें विभिन्न समारोह से (बस सामान्य सिंक सहायक कार्यों कि वापसी एक मूल्य के विभिन्न कार्यों के द्वारा इस्तेमाल किया जा सकता) की तरह इस्तेमाल किया जा करने की अनुमति देता
var getXyz = function(onResult){ //async functions that return do so via callbacks
//you can also another callback for errors (kind of analogous to throw)
$.get('http://www.someurl.com/123=json', function(data) {
var xyz = data.positions[0].latitude;
onResult(xyz); //instead of writing "return xyz", we pass x to the callback explicitely.
});
};
getXyz(function(xyz){ //this would look like "var xyz = getXyz();" if it were sync code instead.
console.log('got xyz');
});
चाल यहाँ करने के लिए कॉल में समारोह से सभी वापसी बयान बदलने के लिए है कॉलबैक फ़ंक्शन ऐसा सोचें कि एसिंक फ़ंक्शन कभी वापस नहीं आया है और किसी को वापस मूल्य देने का एकमात्र तरीका कॉलबैक पर उस मान को पास करना है।
आप पूछ सकते हैं कि ऐसा करने का कोई आसान तरीका क्यों नहीं है। खैर, ऐसा नहीं है, जब तक कि आप जावास्क्रिप्ट की बजाय किसी अन्य भाषा का उपयोग नहीं करते (या कम से कम कुछ जो आपको सिंक्रोनस शैली में एसिंक कोड लिखने देता है लेकिन स्वचालित रूप से नियमित जावास्क्रिप्ट पर संकलित करता है)
यदि आप 'var' कीवर्ड को अपने से बाहर ले जाते हैं फ़ंक्शन और अपने प्रारंभिक 'xyz' के सामने, फिर आप अपने एजेक्स अनुरोध को पूरा करने के बाद निष्पादित किसी भी फ़ंक्शन में उस दायरे में कहीं भी इसका उपयोग कर सकते हैं। – Paulpro
जबकि * * * सिंक्रोनस ** AJAX (यह * jQuery में * दस्तावेज * है), आमतौर पर इसे उपयोगकर्ता अनुभव पर नकारात्मक प्रभाव के कारण * से बचा जाना चाहिए *। इसके बजाए, एसिंक्रोनस AJAX के इवेंट-आधारित मॉडल का उपयोग करने पर ध्यान केंद्रित करें। यही है, कॉलबैक के भीतर से * xyz' * के साथ डीओएम अपडेट करें। –
@pst। हर समय एक ही सवाल है। यह एक और डोम तैयार समस्या है। – gdoron