मेरे पास एक एप्लिकेशन है जिसे डेटा को एक निश्चित क्रम में लोड करने की आवश्यकता है: रूट URL, फिर स्कीमा, फिर अंत में एप्लिकेशन को स्कीमा के साथ आरंभ करता है और विभिन्न डेटा ऑब्जेक्ट्स के लिए आग्रह करता हूं। जैसे ही उपयोगकर्ता एप्लिकेशन को नेविगेट करता है, डेटा ऑब्जेक्ट लोड हो जाते हैं, स्कीमा के खिलाफ मान्य होते हैं, और प्रदर्शित होते हैं। जैसा कि उपयोगकर्ता डेटा CRUDs करता है, स्कीमा पहले-पास सत्यापन प्रदान करते हैं।
मुझे इनिशियलाइज़ेशन में समस्या हो रही है। मैं रूट ऑब्जेक्ट, $ .when () लाने के लिए एक अजाक्स कॉल का उपयोग करता हूं, और फिर प्रत्येक स्कीमा ऑब्जेक्ट के लिए वादों की एक सरणी बनाता हूं। यह काम करता है। मैं कंसोल में देख रहा हूं।
मैं तब सभी स्कीमाओं के लिए भ्रूण देखता हूं, इसलिए प्रत्येक $ .ajax () कॉल कार्य करता है। fetchschemas () वास्तव में वादों की एक सरणी लौटाता है।
हालाँकि, वह फाइनल जब () क्लॉज़ कभी नहीं होता है और कंसोल पर "DONE" शब्द कभी प्रकट नहीं होता है। Jquery-1.5 का स्रोत कोड प्रतीत होता है कि "null" एक वस्तु के रूप में स्वीकार्य है जो पास में उपलब्ध है। में पारित।
इसने Futures.js का उपयोग करके काम किया। अगर ऐसा नहीं है, तो jQuery के डिफ्रेड्स की एक सरणी कैसे प्रबंधित की जानी चाहिए?
var fetch_schemas, fetch_root;
fetch_schemas = function(schema_urls) {
var fetch_one = function(url) {
return $.ajax({
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
return $.map(schema_urls, fetch_one);
};
fetch_root = function() {
return $.ajax({
url: BASE_URL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
$.when(fetch_root()).then(function(data) {
var promises = fetch_schemas(data.schema_urls);
$.when.apply(null, promises).then(function(schemas) {
console.log("DONE", this, schemas);
});
});