2017-07-14 3 views
1

Das folgende Javascript ist aufhängen. Ich habe mir selbst Apps Script beigebracht, um Daten auf einem Blatt zu sortieren. Mein Webentwickler-Freund und ich haben in den letzten 2 Stunden keine Ahnung, warum dieses spezielle Skript zum Stillstand kommt. Es sagt nur Running Script für immer ....Google Apps Script aufhängen (Javascript)

Was passiert ist, dass ich einen Abschnitt einer Tabelle als Kalenderbereich, der bereits einen dynamischen Kalender durch eine meiner anderen Funktionen aufgedruckt hat. Zu Testzwecken isolierte ich diese Funktion und gab ihr ein Dummy-Array, aber die Funktion sollte den Kalender durchlaufen, die COORDs des 'Datums' suchen, dh 1,2,3,4, und die Koordinaten einer leeren Zelle unter diesem Datum zurückgeben (der Ort, an dem ich Daten in den Kalender lege).

function printCalendarValues(array){ 
    var array = [0,143,534,342,54,1,41,1]; 
    var Calendar_Display_range = recruiter_sheet.getRange('B8:H19'); 
    var Calendar_Display_values = Calendar_Display_range.getValues();  
    function getCellBelow(day, rangeArray){ 
    for(i=0; i<rangeArray.length; i++){ 
     for(j=0;j<rangeArray[i].length; j++){ 
     if(rangeArray[i][j]==day){ 
      var res = [i+9,j+2]; 
      return res; 
     };   
     }; 
    } 
    }; 
    for(i=0;i<2;i++){ //< ---- THIS IS WHERE IT BREAKS 
    // If I take the code in this for loop out of it and run it 
    // only once then it runs as expected. It breaks when I put it in 
    // this for loop. You can see I only loop twice right now. I 
    // did that for testing, but i've tried twice, or array.length 
    // anything other than running it once breaks it. 
    var cellBelow = getCellBelow(i+1, Calendar_Display_values); 
    recruiter_sheet.getRange(cellBelow[0],cellBelow[1]).setValue(array[i]); 
    }; 
}; 

Antwort

1

Sie müssen die Variable i am Anfang Ihrer Funktion definieren.

function printCalendarValues(array){ 
    var i;//Define i - its' value will be undefined 

Oder Sie müssen das var Schlüsselwort innerhalb der for Parameter hinzuzufügen. for (var i = 0, etc Derzeit ist die Variable i eine globale. Der Wert i ist im "globalen Bereich". Alle Funktion, die Sie ausführen, haben Zugriff auf i, wie es jetzt ist.

Wenn Ihre zweite for Schleife ruft die getCellBelow Funktion, sowohl die for Schleife und die Funktion getCellBelow sind die Variable i teilen. Also, i wird auf 1 gesetzt, dann wird die Funktion getCellBelow aufgerufen. Dann wird i auf Null zurückgesetzt. So wird Ihre for Schleife für immer weitergehen. Es wird nie auf 1 gesetzt. Es wird durch die Funktion getCellBelow ständig auf Null zurückgesetzt.

for(i=0;i<2;i++){ //i gets set to zero and then incremented to 1 
    var cellBelow = getCellBelow(i+1, Calendar_Display_values);//function called 

Dann in der Funktion getCellBelow;

for(i=0; i<rangeArray.length; i++){//i is set to zero and until the array lengh 

So könnte i leicht jetzt größer sein als eins. Und Ihre Schleife for(i=0;i<2;i++){ stoppt.

Sie können dies sehen, indem Sie Logger.log('i: ' + i) Anweisungen hinzufügen und dann das Protokoll anzeigen. Wählen Sie im Menü Ansicht nach dem Ausführen des Codes Protokolle aus.

Sie sollten i innerhalb der Funktion definieren function getCellBelow(day, rangeArray){

werden soll:

function getCellBelow(day, rangeArray){ 
    var i; 

So wird die Nutzung von i innerhalb dieser Funktion auf die Funktion beschränkt und nicht einen anderen Wert von i beeinflussen außerhalb dieser Funktion.

Verwandte Themen