次のように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 分以上実行できないため (クォータを参照)、大きなタスクを小さな断片にチャンクする唯一の可能な解決策です。