मैं jQuery का उपयोग कर रहा हूं और मेरे पास एसिंक्रोनस AJAX अनुरोधों का एक लूप है। मुझे पता है कि मैं उन सभी के लिए इंतजार कर सकता हूं जो आसानी से '$ .when.apply (array_of_requests) .then()' विधि का उपयोग कर समाप्त हो जाएं।नेस्टेड async तक इंतजार कैसे करें jQuery AJAX अनुरोध समाप्त हो गए हैं?
लेकिन मैं यह भी AJAX अनुरोध करता है कि केवल के बाद पहली अनुरोध के प्रत्येक पूरा कर लें क्रियान्वित कर रहे हैं का एक और सेट है। मैं उनके लिए भी खत्म होने का इंतजार करना चाहता हूं, लेकिन मुझे 100% यकीन नहीं है कि मुझे सबसे अच्छा तरीका मिला है।
var intital_data = [1,2,3,4,5,6,7,8,9,10];
var promises = [];
var promises_inner = [];
$.each(intitial_data, function(i, n) {
var ajax_call = $.ajax({url:'http://www.domain.com/etc/'+n});
promises.push(ajax_call);
ajax_call.done(function(data) {
var ajax_call_inner = $.ajax({url:'http://www.domain.com/etc/'+data.result});
promises_inner.push(ajax_call_inner);
ajax_call_inner.done(function(data) {
// Do something with the content of data here.
});
});
});
तो, जब दस में से प्रत्येक लूप में चलाए AJAX अनुरोध किया जाता है, मैं पहली बार के परिणामों पर आधारित एक दूसरे AJAX अनुरोध करना:
यहाँ मेरी अनुरोधों का एक सरल उदाहरण है। यह सब ठीक काम करता है।
मैं तो, कुछ इस तरह है क्योंकि मैं पूरा कर रहे हैं (वादों सरणी में संग्रहीत) और दूसरा बहुत कुछ (promises_inner में संग्रहीत) दोनों पहले दस अनुरोधों तक इंतजार करना चाहते हैं:
$.when.apply($, promises).then(
function() {
// The ten outer AJAX calls are finished now.
$.when.apply($, promises_inner).then(
function() {
// The inner AJAX calls are finished now.
}
);
}
);
पहले $ .when.apply() में। फिर() 's' done 'फ़ंक्शन दूसरा अनुरोध अभी तक पूरा नहीं हुआ है, या यहां तक कि वाद-विवाद सरणी में भी जोड़ा गया है। लेकिन मैंने पाया कि एक नेस्टेड $ .when.apply() जोड़ने तो() काम करने के लिए लगता है -। अपने 'पूर्ण' समारोह के भीतर सभी अनुरोध समाप्त कर दिया है।
लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा, और सबसे मजबूत, समाधान है। मुझे चिंता है कि यह केवल संयोग से काम करता है - यह तर्कसंगत समझने के बजाय कॉल समाप्त होने के लिए पर्याप्त देरी कर रहा है।
वहाँ एक बेहतर, अधिक रॉक-ठोस, समाधान है? धन्यवाद।
मैं बहुत जल्द ही बात की थी जब मैंने कहा कि यह काम करने लगता है। कभी कभी यह काम करता है, लेकिन अन्य समय, promises_inner के सभी था नहीं किया गया है नेस्टेड AJAX प्रश्न विज्ञापन अभी तक इसे समर्पित करें। तो कभी-कभी आंतरिक $। जब सब कुछ वापस कर दिया जाता है तो होता है। –