यह क्या तुम यहाँ एक ठोस, वास्तविक दुनिया उदाहरण के बिना कर रहे हैं के बारे में कारण करने के लिए बहुत मुश्किल है। यह निश्चित रूप से एक पैटर्न नहीं है जिसका उपयोग मैं अपने कोड में बहुत अधिक उपयोग करता हूं, इसलिए मुझे संदेह है कि आप अपनी मान्यताओं का पुन: आकलन करके इसे ठीक करने के लिए जा सकते हैं।
कहा जा रहा है कि आप वादा श्रृंखला का उपयोग कर सकते हैं। इस मामले में नोट वादाThatLoadsVar एक वादा है, यह एक ऐसा काम नहीं है जो वादा करता है। इसका मतलब है कि यह एक राज्य को बनाए रखता है, और दूसरी बार यह कोड आगे बढ़ता है, यह तुरंत वापस आ जाएगा।
promisethatLoadsVar.then(function(value) {
myvar = value;
doSomeTreatment(myvar);
})
आप एक स्पष्ट सवाल दे सकता है, तो मैं तुम्हारे लिए एक स्पष्ट उत्तर देने के लिए अच्छा लगेगा।
संपादित करें: मैं टिप्पणियों में उल्लिखित उदाहरण पर विस्तार करना चाहता हूं। LoDash लाइब्रेरी का उपयोग कर एक समाधान यहां दिया गया है। (बीटीडब्लू, आपको लॉनाश या अंडरस्कोर का उपयोग करना चाहिए, वे मूल रूप से जावास्क्रिप्ट की मानक लाइब्रेरी हैं)।
var getData = _.once(function() { return $.getJSON(...) });
$('button').on('click', function() {
getData().then(function(data) { showDialog(data) })
})
यहाँ ध्यान दें कि getData
एक लिपटे समारोह है कि पहले मंगलाचरण के बाद सिर्फ समारोह को फिर से लागू बिना अधिक से अधिक एक ही बात वापस आ जाएगी है। पहली बार जब आप इसे आमंत्रित करेंगे, तो यह एक वादा वापस करेगा जो डेटा पुनर्प्राप्त होने पर हल हो जाता है। दूसरी बार आप वापस वही वादा प्राप्त करें जो पहले से ही हल हो जाएगा।
क्या आप getData
पर पैरामीटर में पास करना चाहते हैं?
var getData = _.memoize(function(id) { return $.getJSON(url+id) });
$('button').on('click', function() {
getData($('#selector').val()).then(function(data) { showDialog(data) })
})
यह एक ही बात करते हैं, लेकिन पहले इनपुट पैरामीटर getData
के लिए पारित द्वारा वादों को कैश होगा।
स्रोत
2015-01-28 14:48:34
उफ़ - इन jQuery का वादा कर रहे हैं या नए "मानक" वादे? – Alnitak
मेरा प्रश्न अज्ञेयवादी होना चाहता था, ताकि उत्तर सबसे अच्छा समाधान प्रस्तावित कर सके! तो बस सर्वोत्तम मानक का उपयोग करें या वादा, या Deferred, या आप पसंद कुछ भी नहीं। –