为什么 Google Apps 脚本不更新电子表格中的工作表数量?

Why does Google Apps Scripts not update number of sheets in a spreadsheet?

我有一个 Google Apps 脚本,可以制作电子表格,制作一堆表格,并将这些表格链接到该电子表格。接下来我要做的是修改电子表格、重新排列工作表、更改工作表名称等。我的问题是我的电子表格似乎没有更新以确认表单中的新工作表,直到整个脚本完成。

这是我的代码:

function mwe() {
  var ss = SpreadsheetApp.create("Spreadsheet");
  var form1 = FormApp.create("Form 1");
  var form2 = FormApp.create("Form 2");
  Logger.log(ss.getNumSheets());
  form1.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  Logger.log(ss.getNumSheets());
  form2.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  Logger.log(ss.getNumSheets());
}

这是我的输出:

Info    1.0
Info    1.0
Info    1.0

如果我记录电子表格的 ID,我可以制作一个新脚本:

function mwe2() {
  var ss = SpreadsheetApp.openById("[redacted]");
  Logger.log(ss.getNumSheets());
}

这具有预期的输出:

Info    3.0

有人知道这是为什么吗?我试过存储 ID,重新打开具有该 ID 的电子表格,并在该变量中记录工作表的数量,但我总是得到相同的结果,除非我 运行 一个新脚本。

正如 Cooper 所建议的那样,SpreadsheetApp.flush() 解决了问题:

function mwe() {
  var ss = SpreadsheetApp.create("Spreadsheet");
  var form1 = FormApp.create("Form 1");
  var form2 = FormApp.create("Form 2");
  Logger.log(ss.getNumSheets());
  form1.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  SpreadsheetApp.flush();
  Logger.log(ss.getNumSheets());
  form2.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  SpreadsheetApp.flush();
  Logger.log(ss.getNumSheets());  
}