如何使用Utilities.sleep()函数

时间:2012-06-21 16:00:12

标签: google-apps-script

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

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

3 个答案:

答案 0 :(得分:40)

Utilities.sleep(毫秒)在程序执行中创建一个“暂停”,这意味着它在你要求的毫秒数内什么都不做。 它肯定会减慢你的整个过程,你不应该在函数调用之间使用它。 但是有一些例外,至少是我所知道的那个:在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)
}

答案 1 :(得分:1)

某些Google服务不习惯使用。最近,我的帐户由于脚本而被锁定,该脚本每秒向同一用户发送两封电子邮件。 Google认为这是垃圾邮件。因此在这里使用睡眠也可以防止这种情况。

答案 2 :(得分:1)

Serge是正确的-我的解决方法:

function mySleep (sec)
{
  SpreadsheetApp.flush();
  Utilities.sleep(sec*1000);
  SpreadsheetApp.flush();
}