我正在尝试创建一个包含2个按钮的Google脚本" start"并且"停止"。点击"开始"将启动一个计时器并点击"停止"将停止计时器。
我知道我无法使用setTimeout或setInterval实现此目的,因此我使用了utilities.sleep(1000)。但是由于谷歌的限制,使用这个我不能执行超过5分钟的功能。
因此我尝试在1秒钟时使用Trigger方法设置,但没有运气。触发根本没有发生。
我正在分享下面的代码,感谢任何帮助。
function onClickStart(){
startTimer();
}
function startTimer() {
removeJobs();
ScriptApp.newTrigger("timer")
.timeBased()
.after(1000)
.create();
timer();
}
function removeJobs() {
PropertiesService.getScriptProperties().deleteAllProperties();
var triggers = ScriptApp.getProjectTriggers();
for (i=0; i<triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
function timer() {
var seconds = 0, minutes = 0, hours = 0,
t,stop_time;
var documentProperties = PropertiesService.getDocumentProperties();
var timer = documentProperties.getProperty('timer_result');
Logger.log('get timer: %s', timer);
if(timer){
timer = timer.split(':');
seconds = +timer[2] || 0 ;
minutes = +timer[1] || 0 ;
hours = +timer[0] || 0 ;
}
seconds++;
if (seconds >= 60) {
seconds = 0;
minutes++;
if (minutes >= 60) {
minutes = 0;
hours++;
}
}
stop_time = (hours ? (hours > 9 ? hours : "0" + hours) : "00") + ":" + (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);
SpreadsheetApp.getActiveSheet().getRange('F7').setValue(stop_time);
Logger.log('set timer: %s', stop_time);
documentProperties.setProperty('timer_result', stop_time);
}
答案 0 :(得分:0)
每次从触发器调用timer()时,都会创建脚本的唯一实例,并且当执行链完成时,它将被销毁。销毁实例时将删除所有全局变量。所以现在每当触发器被调用时,秒,分钟,小时都被设置为0.
对于实例之间的持久数据,请使用属性服务。 https://developers.google.com/apps-script/reference/properties/