在 Google 个 Apps 脚本中设置超时
Set Timeout in Google Apps Scripts
是否可以在 Google Apps 脚本中调用 setTimeout 或等效函数?
当我尝试运行以下代码时:
function onSubmit() {
// we've been called, remove trigger, set timeout, re-enable, and then run function
destroySubmitHandler();
setTimeout(function() {
createSubmitHandler();
myFunction()
}, 5 * 1000)
}
我收到以下错误:
显然您可以像这样使用函数 Utilities.sleep()
:
function onSubmit() {
// we've been called, remove trigger, set timeout, re-enable, and then run function
destroySubmitHandler();
Utilities.sleep(5 * 1000)
createSubmitHandler();
myFunction()
}
你应该尝试专门设计的功能来解决并行提交过多的问题:
function onSubmit(e) {
var lock = LockService.getScriptLock();
lock.waitLock(30000); // lock 30 seconds
//do whatever you want here
lock.releaseLock();
}
据说没有这个锁id是一样的参考google dev-document: https://developers.google.com/apps-script/reference/lock/lock
例如,下面是一个应用程序脚本独立网站功能:
google.script.run.withSuccessHandler(ready).logNow(email);
每次 google sheet 更新 sheet 我都会锁定它,以防有多个人同时更新它,否则数据可能会相互覆盖:
var ls = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("logged");
lock.waitLock(30000);
ls.getRange(ls.getLastRow()+1, 1).setValue(email);
lock.releaseLock();
虽然这30秒看起来很多,但是一旦setValue()函数宕机,锁就会被释放。如果你能看懂中文,我推荐这篇文章:https://www.wfublog.com/2017/03/google-apps-script-spreadsheet-delay-write-data.html
是否可以在 Google Apps 脚本中调用 setTimeout 或等效函数?
当我尝试运行以下代码时:
function onSubmit() {
// we've been called, remove trigger, set timeout, re-enable, and then run function
destroySubmitHandler();
setTimeout(function() {
createSubmitHandler();
myFunction()
}, 5 * 1000)
}
我收到以下错误:
显然您可以像这样使用函数 Utilities.sleep()
:
function onSubmit() {
// we've been called, remove trigger, set timeout, re-enable, and then run function
destroySubmitHandler();
Utilities.sleep(5 * 1000)
createSubmitHandler();
myFunction()
}
你应该尝试专门设计的功能来解决并行提交过多的问题:
function onSubmit(e) {
var lock = LockService.getScriptLock();
lock.waitLock(30000); // lock 30 seconds
//do whatever you want here
lock.releaseLock();
}
据说没有这个锁id是一样的参考google dev-document: https://developers.google.com/apps-script/reference/lock/lock
例如,下面是一个应用程序脚本独立网站功能:
google.script.run.withSuccessHandler(ready).logNow(email);
每次 google sheet 更新 sheet 我都会锁定它,以防有多个人同时更新它,否则数据可能会相互覆盖:
var ls = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("logged");
lock.waitLock(30000);
ls.getRange(ls.getLastRow()+1, 1).setValue(email);
lock.releaseLock();
虽然这30秒看起来很多,但是一旦setValue()函数宕机,锁就会被释放。如果你能看懂中文,我推荐这篇文章:https://www.wfublog.com/2017/03/google-apps-script-spreadsheet-delay-write-data.html