सही के रूप में चिह्नित उत्तर मेरे लिए काम नहीं करता है, और वास्तव में गलत है। यह किसी प्रकार का हैक है और इसे सही उत्तर के रूप में नहीं माना जाना चाहिए। वैसे ही आप सेटटाइमआउट (फ़ंक्शन() {..}, 1000 के अंदर अपना कोड निष्पादित कर सकते हैं)। यह और भी भरोसेमंद है क्योंकि आप देरी निर्धारित कर सकते हैं: -/
मेरे मामले में मुझे अपने वास्तविक आयामों को जानने के लिए सभी तत्वों को संसाधित करने की प्रतीक्षा करनी होगी। जब वे निर्मित, संसाधित और नहीं किए जाते हैं, तो संख्याएं सही नहीं होतीं।
अद्यतन। यहां सही उत्तर दिया गया है:
शायद आपको कुछ एसिंक कॉल जैसे d3.json() का उपयोग करके डोम बनाने के लिए अपना डेटा मिलता है और यही कारण है कि इसमें कुछ समय लगता है। चूंकि एसिंक कॉल गैर-अवरुद्ध है, तो आपका अगला कोड एसिंक कॉल समाप्त होने से पहले भी लागू हो जाता है, जिससे समस्याएं आती हैं, और यही कारण है कि आपने यह प्रश्न पोस्ट किया है।
तो आप डी 3 या कहीं और किसी चीज़ की तलाश करके इसे हल करने का प्रयास कर रहे हैं, जो आपको बताएगा कि डी 3 एसिंक कॉल समाप्त हो गया है और अब आप अपनी अगली चीज़ कर सकते हैं। कुछ लोग सिंक AJAX कॉल बनाने का सुझाव देते हैं। यह बहुत गलत है। Async कॉल async होने के लिए बनाए जाते हैं।
आपको वास्तव में क्या करने की आवश्यकता है अपने प्रतिमान को बदलने के लिए है। बस उस async कॉल पर कॉलबैक पास करें और यही वह है!ऐसा ही कुछ:
function thingsToDoWhenDOMisBuilt() {
...
}
function buildDOM(rootNode, error, thingsToDoWhenDOMisBuilt) {
...
// everything is built, so we can do our post-build thing against DOM
if (thingsToDoWhenDOMisBuilt)
thingsToDoWhenDOMisBuilt()
}
d3.json(urlToData, buildDOM) {
if (error)
console.log("oops")
buildDOM(rootNode, thingsToDoWhenDOMisBuilt)
}
इसके अलावा, जैसा कि ऊपर का सुझाव दिया async.js
बाध्यकारी घटनाओं पर एक नज़र डालें भी एक भयानक विचार है। आपको इसके बजाय .enter() .exit() का उपयोग करना चाहिए। डी 3 डेटा संचालित है, अगर आपको ईवेंट संचालित प्रवाह की आवश्यकता है, तो बस jQuery या वेनिला जेएस का उपयोग करें!
शानदार, धन्यवाद। जाहिर है, मैं बहुत दूर तक jQuery भूमि में रहा हूँ। – Roshambo
यह बुरा अभ्यास है, और क्यों jQuery और उसके प्रतिस्पर्धियों में इतने सारे पहले से ही भिन्न हैं। – ijw
ilw सही है। कुछ मोबाइल वेब दृश्यों पर, यह कभी-कभी ऐप खोलते समय गलत स्क्रीन चौड़ाई आकार की रिपोर्ट करेगा। तैयार होने पर दस्तावेज़ की प्रतीक्षा करना इससे बचा जाता है। – phreakhead