在Google Apps脚本中设置超时

时间:2015-04-15 19:43:15

标签: google-apps-script

是否可以在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)
}

我收到以下错误:

screenshot

2 个答案:

答案 0 :(得分:25)

显然你可以像这样使用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()
}

答案 1 :(得分:0)

您应该尝试专门设计的功能,以解决过多并行提交的问题:

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工作表更新工作表时都将其锁定,以防万一有多个人同时更新工作表,否则数据可能会相互覆盖:

  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