2013-04-23 4 views
7

उल्का संग्रह कर्सर फ़ोरैच लूप नीचे दिए गए कोड में क्यों काम नहीं करता है। यदि मैं एक टेम्पलेट.messages.rendered या Deps.autorun फ़ंक्शन के अंदर लूप को लपेटता हूं, तो यह काम करता है। मुझे समझ में नहीं आता क्यों।उल्का संग्रह कर्सर प्रत्येक काम नहीं कर रहा है

Messages = new Meteor.Collection("messages"); 

processed_data = []; 

if(Meteor.isClient) { 

    data = Messages.find({}, { sort: { time: 1 }}); 
    data.forEach(function(row) { 
     console.log(row.name) 
     processed_data.push(row.name); 
    }); 
} 

उत्तर

11

आपका कोड चलने पर संदेश संग्रह तैयार नहीं है।

इस तरह की कोशिश कुछ:

Messages = new Meteor.Collection("messages"); 

if(Meteor.isClient) { 
    processed_data = []; 

    Deps.autorun(function (c) { 
     console.log('run'); 
     var cursor = Messages.find({}, { sort: { time: 1 }}); 
     if (!cursor.count()) return; 

     cursor.forEach(function (row) { 
      console.log(row.name); 
      processed_data.push(row.name); 
     }); 

     c.stop(); 
    }); 
} 

अन्य समाधान:

बस सदस्यता के साथ खेलते हैं! आप सदस्यता onReady सदस्यता के लिए http://docs.meteor.com/#meteor_subscribe

+0

तो इसका अर्थ यह है कि जब हमारा ब्राउज़र ऐप लोड करता है, तो संग्रह तैयार नहीं होता है। मैं समझ नहीं पा रहा हूं कि "तैयार" क्या है। – stariqmi

+3

संग्रह async लोड हो रहा है। इसका मतलब है कि यह संदेश-लोडिंग प्रक्रिया को लात मार रहा है और फिर आमतौर पर कोड के साथ आगे बढ़ता है। फिर आप संग्रह को एक्सेस करने का प्रयास कर रहे हैं, जिसे अभी तक एसिंक प्रक्रिया में लोड नहीं किया गया है। इसका मतलब है कि यह तैयार नहीं है। नीचे दिए गए कोड में – jhbruhn

+0

, मैंने प्रकाशित/सदस्यता तकनीक की कोशिश की। काम करता है लेकिन मेरे पास वैश्विक संसाधित सरणी है, जब मैं इसे ब्राउज़र कंसोल में एक्सेस करता हूं, तो यह खाली होता है। अगर मैं सब्सक्राइब कॉलबैक के अंदर console.log हूं, तो यह आबादी है लेकिन जब मैं इसे कंसोल में दर्ज नहीं करता हूं। – stariqmi

संबंधित मुद्दे