कॉलबैक को पहचानना है/को संशोधित करने के लिए डालते हैंपूरी तरह से ठीक है। समस्या यह है कि जब आपका "काम नहीं करता" - लेबल console.log(myArr)
निष्पादित करता है, तो कॉलबैक अभी तक नहीं निकाल दिया गया है।
के अपने कोड थोड़ा बदल डालते हैं:
var myArr = [];
function show_fb() {
var firebase = new Firebase('https://scorching-fire-6816.firebaseio.com/');
firebase.on('child_added', on_post_added); // steps 1-3
console.log(myArr); // step 4
return myArr; // step 5
};
function on_post_added(snapshot) { // step 6
var newPost = snapshot.val();
myArr.push(newPost.user); // step 7
console.log(myArr); // step 8
}
अब यह देखने के लिए क्या हो रहा है थोड़ा आसान हो सकता है।
- आप
child_added
के लिए एक श्रोता है कि आपके Firebase में जोड़ा जाता है प्रत्येक पोस्ट के लिए on_post_added
कॉल करेंगे रजिस्टर
- इस सर्वर के लिए एक कॉल है, जो समय की एक महत्वपूर्ण राशि का समय लग सकता
वापस जाने के लिए में परिणाम होगा
- इस बीच आपका जावास्क्रिप्ट कोड जारी है और ...
- सरणी है, जो इस स्तर पर अभी भी
- खाली है लॉग और तब इस प्रकार कुछ बिंदु सर्वर नया मान (रों) रिटर्न पर अब एक खाली सरणी
- वापस लौटकर आपके कॉलबैक शुरू हो जाती है
- जिसका मतलब है हम समस्याओं
- बिना सरणी में जोड़ सकते हैं और यह कंसोल के लिए प्रवेश करने की उम्मीद मूल्यों
एसिंक्रोनस कोड हैंडलिंग से पता चलता/इस तरह कॉलबैक कुछ करने के लिए इस्तेमाल हो रही लेता है, लेकिन Firebase या किसी के साथ काम करने के लिए महत्वपूर्ण हैअन्य AJAX- या घटना संचालित प्रौद्योगिकी। कॉलबैक के कोड को एक अलग फ़ंक्शन में डालकर कभी-कभी यह देखने में थोड़ा आसान होता है कि क्या हो रहा है।
फ़ायरबेस के मामले में यह भी एहसास करने में मदद कर सकता है कि इस घटना को child_added
कहा जाता है। जब भी आप पहली बार अपना कॉलबैक पंजीकृत करते हैं, तब भी जब भी कोई बच्चा फायरबेस में जोड़ा जाता है, उसे बुलाया जाता है। तो कुछ मिनट बाद जब कोई अन्य ग्राहक एक बच्चा जोड़ता है, तो आपका कॉलबैक अभी भी आग लग जाएगा, myArr
पर नया बच्चा जोड़ देगा। उस चरण में उपरोक्त चरण 4 और 5 में कोड लंबे समय तक निष्पादित हो जाएगा और फिर से निष्पादित नहीं होगा।
समाधान सरल है:
var myArr = [];
function show_fb() {
var firebase = new Firebase('https://scorching-fire-6816.firebaseio.com/');
firebase.on('child_added', on_post_added);
};
function on_post_added(snapshot) {
var newPost = snapshot.val();
myArr.push(newPost.user);
console.log(myArr);
// do whatever else you need to do for a new post
}
स्रोत
2014-10-10 12:39:28
स्पष्ट उत्तर के लिए धन्यवाद: कुछ भी है कि आप के बाद एक बच्चे को अपने कॉलबैक में जोड़ा जाता है क्या करना चाहते हैं डाला! अपने उत्तर की तरह सबसे अच्छा लेकिन बैज पॉइंट्स (संकेत) की कमी के लिए इसे वोट करने में असमर्थ हूं। –
यह देखते हुए कि आपने सवाल पूछा है, आप इसके बाईं ओर चेक मार्क पर क्लिक करके ** ** मेरे उत्तर को स्वीकार करने में सक्षम होना चाहिए। Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –
उत्तर फ्रैंक के लिए धन्यवाद - यह सिर्फ उस गेम पर मेरी मदद करता है जिसे मैं बना रहा हूं। – Nadjib