2016-04-16 5 views
1

Wie stelle ich ein Zeitlimit ein, um eine Funktion nach 1 Minute zu beenden?Wie kann die Ausführungszeit von Google Script auf 1 Minute begrenzt werden?

Situation: Ich habe ein Skript, das alle 5 Minuten jeden Tag läuft. Meine Skripte überschreiten die tägliche Rechenzeit von 3 Stunden.

Also, ich muss eine Funktion, die Anrufe ruft mein Functon A (sehr lange, so dass ich es post hier), aber nur lässt es läuft für 1 Minute maximal, dann endet.

Ich habe ausgiebig gesucht, aber alle anderen Lösungen arbeiten mit Schleifen. Meine Funktion, die das Timeout verursacht, ist jedoch keine Art von Schleife. Es macht mir nichts aus, dass die Funktion nicht erfolgreich abgeschlossen wird.

+1

uns erklären, wie Ihre Anwendung Funktion tut Schleifen noch seine kann so lange dauern. Ich bezweifle stark, dass Sie keine Schleifen verwenden. Sie verwenden wahrscheinlich Schleifen. Sie müssen lediglich die verstrichene Zeit überprüfen und gegebenenfalls stoppen. –

Antwort

1

Sie benötigen entweder eine Schleife, die kurze Codeabschnitte ausführt, die jeweils nur für einige Sekunden ausgeführt werden; oder Sie müssen mehrere Codezeilen hinzufügen, die den Status "so oft" überprüfen.

var startTime = Date.now(); //Get milliseconds from a date in past 

Als Test können Sie die folgende Funktion ausführen und die Protokolle anzeigen dann:

die Startzeit erhalten, könnten Sie

function exampleCode() { 

    var startTime = Date.now(); 
    Logger.log(startTime); 

    Utilities.sleep(1000); //Stop the code for 1 second 

    var timeNow = Date.now(); 
    Logger.log(timeNow); 

    var elapsedTime = timeNow - startTime; 
    Logger.log(elapsedTime); 
}; 

Natürlich wouldn Sie Ich möchte die startTime niemals neu zuweisen. Setzen Sie das also an den Anfang Ihres Codes und berechnen Sie ihn nie neu.

Um den Code, 1 Minute zu stoppen, das ist 60000 Millisekunden

if (elapsedTime > 60000) {return}; //Quit after 1 minute 

Sie könnten eine Funktion erstellen, die verstrichene Zeit zu überprüfen:

function elapsedTime() { 
    var timeNow = Date.now();  
    var elapsedTime = timeNow - startTime; 
    if (elapsedTime > 60000) {return 'die'}; //return 'die' if longer than 1 minute 
}; 

if (elapsedTime() === 'die') {return};//Quit after 1 minute 
+0

Zuerst, danke für die schnelle Antwort! Okay, jetzt stelle ich fest, dass ich Funktion B machen muss, die Funktion A startet, dann tut Utilities.sleep (60000); Überprüfen Sie dann, ob die Funktion A noch läuft. Ist dies der Fall, beenden Sie die Funktion A. Wenn Funktion A in Funktion A ausgeführt wird, beenden Sie zuerst die Funktion B und beenden Sie sie dann. Meine Frage ist, wie kann ich eine Funktion töten, während sie ausgeführt wird? –

+0

Lesen Sie die Informationen unter diesen Links: [Parallelitätsmodell und Ereignisschleife] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) und [JavaScript Function Invocation] (http: // www .w3schools.com/js/js_function_invocation.asp) –

+0

Danke, hab es jetzt! –

Verwandte Themen