अगर मैं इसे सही ढंग से समझूं, तो आप कुछ ऐसा करना चाहेंगे:
var positions = this.getPositions(function(positions) {
console.log(positions[0]);
});
यही है, आप "getPositions" को इस तरह से लिखना चाहेंगे कि यह एक एकल कॉलबैक पैरामीटर को स्वीकार करता है जिसे एक बार पोजीशन सफलतापूर्वक लोड होने के बाद लागू किया जाता है, और पोजीशन ऐरे को पास कर दिया जाता है। getPositions
. में आप जांच सकते हैं कि क्या स्थितियां पहले ही लोड हो चुकी हैं, और यदि ऐसा है, तो सीधे कॉलबैक का आह्वान करें। अन्यथा, आप उन्हें कॉलबैक की कतार में जोड़ देंगे (उदा. this.positionsLoadedCallbacks
), जिसके माध्यम से आप सभी पदों के लोड होने के बाद पुनरावृति करते हैं (मुझे लगता है कि यह आपके load
में कहीं होगा। me.orderPositions()
. के निकट कार्य करें )।
उदाहरण के लिए, आपका getPositions
फ़ंक्शन इस तरह दिख सकता है:
getPositions : function(callback) {
if(this.positions !== null) {
callback(this.positions);
return;
}
this.positionsLoadedCallbacks.push(callback);
},
कहीं न कहीं आप सुनिश्चित हैं कि पदों को लोड किया गया है (यानी लोडजसन सफलता कॉलबैक में) आपको कुछ इस तरह रखना होगा:
for(var i=0; i < this.positionsLoadedCallbacks.length; i++) {
this.positionsLoadedCallbacks[i](this.positions);
}
और this.positionsLoadedCallbacks
. को इनिशियलाइज़ करना न भूलें :)पी>
console.log सामान्य ज्ञान
इसका कारण console.log(positions)
. है काम करता है और console.log(positions[0])
आसान नहीं है:यदि आप किसी ऑब्जेक्ट संदर्भ को console.log
. पास करते हैं , जब आप छोटे "विस्तार" तीर पर क्लिक करते हैं और अंदर देखने का प्रयास करते हैं तो वस्तु का निरीक्षण किया जाएगा वस्तु/सरणी। जब तक आप उस तीर पर क्लिक करते हैं, तब तक निश्चित रूप से स्थितियां लोड हो चुकी होती हैं। हालाँकि, यदि आप एक विशिष्ट सरणी तत्व पास करते हैं (जैसे positions[0]
) यह सीधे उस मूल्य को देखने की कोशिश करेगा, यह पता चलेगा कि यह अभी भी undefined
. है , और उस परिणाम को कंसोल में रिकॉर्ड करें।
इसे स्वयं आज़माएं:
var i = [];
console.log([i]);
i.push(123);
पिछला स्निपेट, chrome 24 में, [Array[0]]
. दिखाता है कंसोल में, लेकिन जब मैं इसका विस्तार करता हूं, तो यह मुझे बताता है कि सरणी length: 1
. के रूप में है और इसका पहला तत्व 123
है