के एक सरल आस्थगित वस्तु बनाएँ:किसी डिफरर्ड ऑब्जेक्ट और अपने स्वयं के वादे ऑब्जेक्ट के बीच क्या अंतर है?
defer = $.Deferred(function (defer) {
setTimeout(defer.resolve, 3000);
});
ऊपर आस्थगित वस्तु 3 सेकंड के लिए "लंबित" राज्य में हो जाएगा, और फिर "का समाधान" राज्य के लिए स्विच (जिस पर सभी कॉलबैक करने के लिए बाध्य बात इसे बुलाया जाएगा)। , हम .done()
या .then()
उपयोग कर सकते हैं
promise = defer.promise();
अब, कॉलबैक जो एक बार स्थगित वस्तु हल हो गई है लागू किया जा करने के लिए जा रहे हैं जोड़ने के लिए:
की भी है कि आस्थगित वस्तु का वादा पुनः प्राप्त करते हैं। हालांकि, हम इस विधि को दोनों को डिफरर्ड ऑब्जेक्ट या अपने स्वयं के वादे ऑब्जेक्ट पर आमंत्रित कर सकते हैं।
defer.then(handler);
या
promise.then(handler);
दोनों मामलों में, handler
समारोह द्वारा सक्रिय किया जाएगा (इस मामले में 3 सेकंड के बाद)।
अगर हम $.when
उपयोग करते हैं, हम फिर से स्थगित वस्तु या उसके वादा वस्तु पारित कर सकते हैं:
$.when(defer).then(handler);
या
$.when(promise).then(handler);
फिर, कोड की उपरोक्त दो लाइनों के बीच कोई अंतर नहीं है ।
लाइव डेमो:http://jsfiddle.net/G6Ad6/
तो, मेरे सवाल है क्योंकि हम आस्थगित वस्तु पर ही .then()
, .done()
, आदि आह्वान कर सकते हैं और तब से हम $.when()
में है कि आस्थगित वस्तु पारित कर सकते हैं, .promise()
की बात क्या है और वादा वस्तु को पुनः प्राप्त करना? वादा वस्तु का उद्देश्य क्या है? कार्यक्षमता में यह अनावश्यकता क्यों है?
आह यह एक सीलबंद प्रति * duh * है ... जो इसे समझाता है। –
इस पर जोड़ने के लिए जो मुझे [डॉक्स] (http://api.jquery.com/Types/# समझौता) से बहुत स्पष्ट बनाता है: "वादा ऑब्जेक्ट - यह ऑब्जेक्ट के तरीकों का सबसेट प्रदान करता है उपयोगकर्ताओं को डिफरर्ड की स्थिति बदलने से रोकने के लिए डिफरर्ड ऑब्जेक्ट (फिर, किया गया, असफल, हमेशा, पाइप, और राज्य)। " –