43

函数的具体用途是 Utilities.sleep()什么?我们应该在函数调用或 API 调用之间使用它吗?

我使用Utilities.sleep(1000)中间函数调用,对吗?它会减慢执行时间吗?

4

4 回答 4

66

Utilities.sleep(milliseconds) 在程序执行中创建一个“暂停”,这意味着它在您要求的毫秒数内什么都不做。它肯定会减慢你的整个过程,你不应该在函数调用之间使用它。不过也有一些例外,至少我知道的一个例外:在 SpreadsheetApp 中,当您想要删除许多工作表时,您可以在每次删除之间添加数百毫秒以允许正常的脚本执行(但这是一种解决方法此特定方法的已知问题)。在电子表格中创建许多工作表时,我确实必须使用它,以避免在执行后需要“刷新”浏览器。

这是一个例子:

function delsheets(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var numbofsheet=ss.getNumSheets();// check how many sheets in the spreadsheet
  for (pa=numbofsheet-1;pa>0;--pa){ 
    ss.setActiveSheet(ss.getSheets()[pa]);
    var newSheet = ss.deleteActiveSheet(); // delete sheets begining with the last one
    Utilities.sleep(200);// pause in the loop for 200 milliseconds
  }
  ss.setActiveSheet(ss.getSheets()[0]);// return to first sheet as active sheet (useful in 'list' function)
}
于 2012-06-21T16:11:23.313 回答
10

Serge 是对的 - 我的解决方法:

function mySleep (sec)
{
  SpreadsheetApp.flush();
  Utilities.sleep(sec*1000);
  SpreadsheetApp.flush();
}
于 2020-11-17T11:17:52.687 回答
3

一些谷歌服务不喜欢使用太多。最近我的帐户因为脚本而被锁定,该脚本每秒向同一用户发送两封电子邮件。谷歌将其视为垃圾邮件。所以在这里使用 sleep 也是有道理的,可以防止出现这种情况。

于 2020-11-05T16:38:48.107 回答
0

您还可以使用它来限制每秒的 API 拉取次数。一些网站限制每秒的 API 拉取量,以减少垃圾邮件和服务器压力。

于 2021-09-17T15:55:28.063 回答