На основе ССЫЛКА Я узнал, как продлить время выполнения скрипта Google Apps Script, когда оно превышает максимальное время выполнения 5 минут.
Это работает, но я не уверен, еслиЯ сделал это правильно. Я сталкиваюсь с некоторыми проблемами, описанными ниже.
Исходя из главной функции, я передаю переменную "t" в качестве начальной точки цикла и вызываю функцию Foto_function. Существует триггер, если время превышает ограничение в 240 секунд.
if (isTimeUp(today)) {
// schedule a trigger for a different function
SpreadsheetApp.activeSheet.getRange("A1").setValue(t);
ScriptApp.newTrigger("Foto_function_Repeat")
.timeBased()
.everyMinutes(1)
.create();
break;
}
.....
function isTimeUp(today) {
var now = new Date();
return now.getTime() - today.getTime() > 240000;
// 30000 = 30 seconds; this is the threshold limit
// you are free to setup your own threshold limit
}
Когда время превышено, клон функции Foto_function (называемый "Foto_function_Releat")будет запущено. Переменная "t" будет передана функции клона. Время истекает с нуля, и если прошло 240 секунд, оно переключается обратно на исходную функцию Foto_FIX.
По окончании цикла цикл триггеров будет удален ....
if (t == lastrow_Fotos + 1) {
stopp_triggers();
break;
}
.....
function stopp_triggers(){
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
sendmail();
}
}
НО: я получаю от 8 до 12 электронных писем с точно таким же содержанием, и я не знаю почему? Что-то не так с моим кодом?
..... ЗДЕСЬ ПОЛНЫЙ КОД .... и мне будет отправлено электронное письмо, так что я знаю, что сценарий полностью завершен.
function mainfunction(){
//do some stuff;
SpreadsheetApp.activeSheet.getRange("A1").setValue(2); // handover the variable "t" to the Foto_function
Foto_function();
}
function Foto_function(){
var today = new Date();
var Geodata = getSheetById(1702838837);
var lastrow_XX = Geodata.getRange(1, 1).getDataRegion(SpreadsheetApp.Dimension.ROWS).getLastRow(); //Last row in column A of sheet GEODATA
value_t = SpreadsheetApp.activeSheet.getRange("A1").getValue();
for (var t = value_t; t <= lastrow_XX + 2; t++){
if (t == lastrow_Fotos + 1) {
stopp_triggers();
break;
}
if (isTimeUp(today)) {
// schedule a trigger for a different function
SpreadsheetApp.activeSheet.getRange("A1").setValue(t);
ScriptApp.newTrigger("Foto_function_Repeat")
.timeBased()
.everyMinutes(1)
.create();
break;
}
else {
//do some stuff;
}
}
}
function Foto_function_Repeat(){
var today = new Date();
var Geodata = getSheetById(1702838837);
var lastrow_XX = Geodata.getRange(1, 1).getDataRegion(SpreadsheetApp.Dimension.ROWS).getLastRow(); //Last row in column A of sheet GEODATA
value_t = SpreadsheetApp.activeSheet.getRange("A1").getValue();
for (var t = value_t; t <= lastrow_XX + 2; t++){
if (t == lastrow_Fotos + 1) {
stopp_triggers();
break;
}
if (isTimeUp(today)) {
// schedule a trigger for a different function
SpreadsheetApp.activeSheet.getRange("A1").setValue(t);
ScriptApp.newTrigger("Foto_function")
.timeBased()
.everyMinutes(1)
.create();
break;
}
else {
do some stuff;
}
}
}
function stopp_triggers(){
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
sendmail();
}
}
function sendmail(){
var user = Session.getActiveUser().getEmail();
var mailname = user.split('@');
mailname = mailname[0];
MailApp.sendEmail({
to: user,
subject: 'GAS-Task is finished',
htmlBody: 'Hello, the task is finished!!!'
});
}
function isTimeUp(today) {
var now = new Date();
return now.getTime() - today.getTime() > 240000;
// 30000 = 30 seconds; this is the threshold limit
// you are free to setup your own threshold limit
}