有没有办法在谷歌应用程序脚本中创建一个每秒增加一分钟的for循环



最近我一直在做一个项目,该项目将数据从谷歌文档实时流式传输到谷歌电子表格。我一直在玩应用程序脚本API,并使用基于时间的触发器方法创建了一个每分钟更新一次的循环。我也知道应用程序脚本不允许for循环持续超过5分钟。所以,我的理论是,触发器每分钟调用的函数可以有一个循环,运行大约一分钟。问题是,我无法让一个函数在一分钟内每秒运行一次(甚至每两三秒运行一次(。下面的代码是我用来创建这个循环的,但我无法使它工作。它要么会在一两秒内非常快地通过数字,要么会不断地运行,永不停止。

function myfunction() {
let start = new Date().getTime()
const limit = 60;
let timeEllapsed = 0

for(i=0; i < 60; i++) {
let start = new Date().getTime()
while(true){
if(start > new Date().getTime + 1000) {
Logger.log(timeEllapsed)  
timeEllapsed += 1
break
}
}
}
}

如何修复此问题,使for循环每秒只重复一次,并且脚本将在60秒后完成运行?

Apps脚本有一个sleep()方法,它将暂停代码:

function myfunction() {
let start = 0;
var timeEllapsed = 0;

const limit = 60000;
const increment = 1000;//1000 milliseconds is 1 second

while(timeEllapsed < limit){
timeEllapsed += increment;
Utilities.sleep(1000);//Wait for 1 second
}

Logger.log(timeEllapsed);
}

60秒计时器:

HTML:

<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
<title><b>Output Folder</b></title>
</head>
<script>
var t=0;
var id='';
function increment() {
t+=1;
check(t);
document.getElementById('txt1').value=t;
google.script.run.onSecond(t);//Calls a server side function
}
function reset() {
clearInterval(id);
t=0;
}
function start() {
id=setInterval(increment,1000);
}
function check(t) {
if(t>=59) {
reset();
}
}
</script>
<body>
<input type="text" id="txt1" />
<br /><input type="button" value="Start" onclick="start();" />
<br /><input type="button" value="Stop" onclick="reset();" />
</body>
</html>

气体:

function onSecond(t) {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
sh.getRange(1,1).setValue(t);
}
function showTimerDialog() {
SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutputFromFile('ah1'));
}

最新更新