2014-10-23 7 views
8

संक्षेप में करने के लिए कॉलबैक, मैं एक सामान्य कॉलबैक कि हमेशा एक सफल ajax कॉल के मामले में आग, जहां विधि शुरू हो जाती है पर निर्भर करता है अलग कॉलबैक कार्यक्षमता द्वारा पीछा करना चाहते हैं।श्रृंखलन एकाधिक किया() एक ही आस्थगित वादा

यह काम करने लगता है। मेरा सवाल यह है कि यदि यह वादा ऑब्जेक्ट का सही उपयोग है और यदि यह मानना ​​सुरक्षित है कि एक ही प्रकार के एकाधिक वादे कॉलबैक हमेशा अनुक्रमिक रूप से ढेर होते हैं?

var dfd = $.Deferred(), 
    promise = dfd.promise(); 

promise.done(function(){ 
    console.log(1); 
}).done(function(){ 
    console.log(2); 
}); 

dfd.resolve(); 

http://jsfiddle.net/4ax4nxbh/

उत्तर

12

यह jQuery में आस्थगित वस्तु की सही और दस्तावेज फायदा नहीं है। प्रलेखन clearly states:

कॉलबैक को जोड़े गए क्रम में निष्पादित किया जाता है।

यह अन्य वादा पुस्तकालयों में अलग ढंग से काम करता है और आम तौर पर .then.done को पसंद किया जाता है वैसे भी (उत्तर में बाद में बताया)। हालांकि, आप jQuery वादे का उपयोग कर रहे हैं, अगर वे सिंक्रोनस हैं तो यह अनुक्रमिक रूप से ठीक हो जाएगा।

तो अपने सवाल का सीधा जवाब हां में है।

हालांकि, अगर आप भी साथ अतुल्यकालिक कोड ऐसा करने और .then के साथ बेहतर यह श्रृंखला हो सकती है:

promise.then(function(){ 
    console.log(1); 
}).then(function(){ 
    console.log(2); 
}).then(function(){ 
    return $.get(...); 
}).then(function(){ 
    console.log(3); // this always executes after the $.get finishes. 
}); 

असल में, done हैंडलर कहते हैं और एक ही वादा वापस आती है और .then एक नया वादा से श्रृंखलित रिटर्न आखरी वाला। आम तौर पर मैं केवल .done का उपयोग श्रृंखला को समाप्त करने के लिए करता हूं और यदि आप वापसी मान रखना चाहते हैं (function(){ का तर्क)

+0

मैं उम्मीद कर रहा था कि आपको यह विषय मिलेगा;) जब आप आम तौर पर कहते हैं तो उसे प्राथमिकता दी जाती है। किसी भी तरह से 'मुझे लगता है कि आप चेनिंग का संदर्भ लेते हैं, और' सामान्य 'बनाम' सामान्य 'में नहीं? मुझे लगता है कि आपकी टिप्पणी के आधार पर सबसे उपयुक्त दृष्टिकोण 'फिर()' का उपयोग करना होगा, इसके बाद "समाप्त" ("समाप्त" किया जाएगा, भले ही मैं केवल इस मामले में सिंक्रोनस कोड से निपट रहा हूं? – Johan

+0

@Johan सामान्य रूप में मैं जब नए वादा लाइब्रेरी का उपयोग कर then' 'done' को' पसंद करते हैं। दूसरी ओर jQuery में श्रृंखला को समाप्त करने के लिए '.done' का उपयोग करके फायदेमंद है - तो हां, फिर फिर से यह jQuery वादे के साथ सबसे बड़ा मुद्दा नहीं है। –

+1

सहमत हुए। मुझे दोनों के बीच अंतर सीखने के लिए धन्यवाद! – Johan

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