在继续 Javascript (GAS) 之前允许 window 计算

Allow the window to calculate before continuing Javascript (GAS)

我看到很多关于这个主题的重复,但我不知道如何真正完成需要完成的事情。

我在一个 sheet 选项卡中有一个 URL 列表,在另一个选项卡中有一个 IMPORTXML() 函数。我正在编写一个脚本来将每个 URL 复制到第二个选项卡,然后根据 IMPORTXML() 的输出执行操作。为此,我需要稍微延迟脚本以确保 IMPORTXML() 在继续之前已计算。 setTimeout() 在这里似乎不合适,因为我需要根据输出计算脚本的其他参数(它正在检查哪一行等)。求助!

function test(){
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var list = sh.getSheetByName("Dec 2018").getRange(row,3,sh.getSheetByName("Dec 2018").getLastRow()-row).getValues();
  var check = sh.getSheetByName("Check");
  for(var row = 2;row<500;row++){
  check.getRange(1,1).setValue(list[row-2][0]);
  //wait right here
  //other code to run based on the output of the =IMPORTXML() formula on the Check sheet
  }
}

要插入一个轻微的延迟,请使用 Utilities.sleep(milliseconds) 和一个足够大的毫秒值来等待最慢的重新计算时间(我认为单个公式是 30000 毫秒,因为这是自定义函数的执行时间限制)。如果这次你想优化,也许你会想使用像 exponential back-off

这样的技术

注意:Window 对象在 Google Apps 脚本服务器端代码执行中不可用,因此 setTimeout() 无法使用。