0

次のようにGoogle Appスクリプトでタイムトリガーをチェーンすることは許可されていますか?

 function doGet(e){   //first invocation by user, HTTP GET 
    if (e == null || e.parameters == null) {
      return ContentService.createTextOutput("EMPTY");
    }

    saveGetParametersForUser(Session.getUser().getEmail(), e);

    //trigger 10 seconds
    var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create();

 }


function timeDrivenEvent() { //runs until there are some data in ScriptDB
  Logger.log("INVOKED AT " + new Date());

  removeAllPreviousTriggers(); //removes old time triggers

  var somedata = loadTaskData({email: "" + Session.getUser().getEmail()});
  var remainingData = processTaskData(somedata);

    if(remainingData == null){
       return; //we are finished here
    } 

  removePreviousAndSaveRemainingTaskData(remainingData);

  var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create();

}
  • ユーザーによる最初の呼び出し doGet()
  • すべてのデータが処理されるまで、スクリプトは 10 秒間隔でそれ自体を呼び出します (たとえば、2 分間の処理、10 秒間何も起こらず、再び 2 分間の処理...)
  • 処理されるデータのサイズは ~ 数キロバイトで、処理時間は通常 1 ~ 2 分です。

スクリプトが中断され、データが完全に処理されないことがあります電子メール アラートを受信して​​おらず、ログや実行トランスクリプトにも何もありません。すべて問題ないようです。

おそらく10秒でスクリプトメソッドを開始するのはかなり速いと思い始めていますが、結局のところAPIにあります...

何か案は ?これは、Google App Script が 5 ~ 6 分以上実行できないため (クォータを参照)、大きなタスクを小さな断片にチャンクする唯一の可能な解決策です。

4

1 に答える 1

0

コメントで推奨されていたように、定期的な時間トリガーを 1 つ持つことはうまく機能しました。

なぜタイムトリガーチェーンがうまく機能しなかったのか不思議です!Google App Scriptがそれを好まなかったという原則を破ったのは何ですか。

ドキュメント : https://developers.google.com/apps-script/class_clocktriggerbuilder

メソッド everyMinutes 1、5、10、15、または 30 のいずれかである必要がある、渡された分数の間隔で起動するように作成するトリガーを設定します。

于 2013-02-21T05:15:56.837 に答える