2012-12-07 11 views
5

तक जावास्क्रिप्ट फॉर-लूप जारी न रखें मुझे लूप के लिए रोकना होगा और जब तक मैं निर्दिष्ट नहीं करता तब तक जारी नहीं रहना चाहिए। सरणी में प्रत्येक आइटम के लिए जो मैं लूपिंग कर रहा हूं, मैं कुछ कोड चलाता हूं जो एक अलग डिवाइस पर एक ऑपरेशन चलाता है, और मुझे तब तक इंतजार करना होगा जब तक कि सरणी में अगले आइटम को लूप करने से पहले उस ऑपरेशन को समाप्त नहीं किया जाता है।निर्दिष्ट

सौभाग्य से, वह कोड/ऑपरेशन एक कर्सर है और इसमें after: अनुभाग है।

हालांकि, यह पूरी तरह से लूप के लिए पूरी तरह से चल रहा है, जिसे मुझे रोकने की आवश्यकता है। क्या लूप को निर्दिष्ट होने तक जारी रखने से रोकने का कोई तरीका है? या शायद एक अलग प्रकार का लूप या कुछ जो मुझे उपयोग करना चाहिए?

मेरी पहली (गरीब) विचार के लिए लूप कि लगातार दौड़ा भीतर थोड़ी देर के पाश बनाने के लिए, जब तक कर्सर की after: भाग true करने के लिए एक boolean सेट था। यह सिर्फ ब्राउज़र बंद :(जैसा कि मैंने डर था कि यह होगा।

कुछ भी मैं कर सकता हूँ? मैं काफी जावास्क्रिप्ट के लिए नया हूँ। मैं अपने वर्तमान परियोजना हालांकि आनंद ले गया है।

यहाँ while-loop प्रयास है। मैं जानता हूँ कि यह पूरे पाश तुरंत चल रहा है क्योंकि dataCounter (सरणी वर्तमान में दो आइटम) 13 करने से चला जाता है तुरन्त:

if(years.length>0){ 
    var dataCounter = 1; 
    var continueLoop; 
    for(var i=0;i<years.length;i++){ 
    continueLoop = false; 
    baja.Ord.make(historyName+"?period=timeRange;start="+years[i][1].encodeToString()+";end="+years[i][2].encodeToString()+"|bql:select timestamp, sum|bql:historyFunc:HistoryRollup.rollup(history:RollupInterval 'hourly')").get(
     { 
      ok: function (result) { 
      // Iterate through all of the Columns 

      baja.iterate(result.getColumns(), function (c) { 
      baja.outln("Column display name: " + c.getDisplayName()); 
      }); 
     }, 
     cursor: { 
      before: function() { 
      baja.outln("Called just before iterating through the Cursor"); 
      counter=0; 
      data[dataCounter] = []; 
      baja.outln("just made data["+dataCounter+"]"); 
     }, 
     after: function() { 
      baja.outln("Called just after iterating through the Cursor"); 
      continueLoop = true; 
     }, 
     each: function() { 

      if(counter>=data[0].length) { 
      var dateA = data[dataCounter][counter-1][0]; 
      dateA += 3600000; 
      } 
      else { 
      var dateA = data[0][counter][0]; 
      } 

      var value=this.get("sum").encodeToString(); 
      var valueNumber=Number(value); 

      data[dataCounter][counter] = [dateA,valueNumber]; 
      counter++; 
     }, 
     limit: 744, // Specify optional limit on the number of records (defaults to 10)2147483647 
     offset: 0 // Specify optional record offset (defaults to 0) 
     } 
     }) 
     while(continueLoop = false){ 
      var test = 1; 
      baja.outln("halp"); 
     } 
    dataCounter++; 
    } 
} 
+2

पोस्ट कुछ कोड है कि आप की कोशिश की है: अपने वास्तविक कोड के साथ यह कुछ इस तरह होगा। यदि आपके पास वास्तविक कोड है जो आपने किया है और यह क्यों काम नहीं कर रहा है, तो लोग आपकी सहायता करने के लिए और अधिक इच्छुक होंगे। –

+0

तो, फॉर-लूप का शरीर एक असीमित कार्य होना चाहिए? – Bergi

उत्तर

5

एक पाश के लिए लूप को प्रत्येक तत्व पर प्रयोग न करें आप की जरूरत है,। आपके पास सरणी के कौन से तत्व को याद रखने के लिए after: है बस किया और फिर अगले के लिए आगे बढ़ें।

कुछ इस तरह:

var myArray = [1, 2, 3, 4] 

function handleElem(index) { 
    module.sendCommand({ 
     ..., // whatever the options are for your module 
     after: function() { 
      if(index+1 == myArray.length) { 
       return false; // no more elem in the array 
      } else { 
       handleElem(index+1)} // the after section 
      } 
    }); 
} 

handleElem(0); 

मैं मान लिया है कि आप एक समारोह कुछ विकल्पों के साथ (जैसे आप $.ajax() के लिए होगा) कहते हैं और after() खंड एक समारोह अपने प्रक्रिया के अंत में कहा जाता है कि (जैसे success() के लिए $.ajax())

"मॉड्यूल" आप कॉल ठीक से after() कॉलबैक में समाप्त हो गया नहीं है, तो आप देरी से अगले तत्व पर प्रक्रिया शुरू करने के लिए इस्तेमाल कर सकते हैं setTimeout()

संपादित करें:

function handleElem(index) { 
    baja.Ord.make("...start="+years[index][1].encodeToString()+ "...").get(
    { 
     ok: ... 
     after: function() { 
      if(index+1 == years.length) { 
       return false; // no more elem in the array 
      } else { 
       handleElem(index+1)} // the after section 
      } 
     } 
    }); 
} 
+0

धन्यवाद! यही वह है जिसकी तलाश में मैं हूं! मुझे पता था कि लूप के लिए कुछ और आदर्श होना चाहिए था। यकीन नहीं है कि मैं आपके समाधान के बारे में क्यों नहीं सोच सकता था। मदद के लिए फिर से धन्यवाद (मुझे अब कुछ भी करना है?; _;) संपादित करें: 2 मिनट प्रतीक्षा करें और जवाब स्वीकार करें, इसे मिला: डी – addMitt

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