2

问题

如果我使用 clasp typescript 项目,GAS v8 引擎上的嵌套触发器将不起作用。“嵌套触发器”是指由另一个计划函数以编程方式创建的计划函数。

  • 扣:v2.3.0

如何重现

  1. 创建扣项目
    clasp create --type standalone
  2. 创建一个main.ts使用以下内容调用的 TypeScript 文件:
// Set trigger on a specific time.
function setTrigger(time:Date, func:string): void {
  console.log('This is scheduling: ' + func + ' on ' + time);
  ScriptApp.newTrigger(func)
      .timeBased()
      .at(time)
      .create();
}
// Set trigger on 5 minutes after.
function schedule() {
  const toBeScheduled = new Date();
  toBeScheduled.setMinutes(toBeScheduled.getMinutes() + 5);
  setTrigger(toBeScheduled, "doSomething");
}

// function which will fire.
function doSomething() {
  console.log("DO SOMETHING");
}
  1. 创建一个tsconfig.json包含以下内容的 json 文件:
{
  "compilerOptions": {
    "lib": ["esnext"],
    "target": "ES2019",
    "experimentalDecorators": true
  }
}
  1. 推送代码
    clasp push
  2. 每 5 分钟设置一次触发schedule()功能,以便每 5 分钟doSomething()触发一次。

但实际上doSomething()并没有触发。触发器已设置,但将因未知原因而被禁用。

笔记

  1. 如果我手动执行schedule()doSomething()则按预期触发。
  2. 如果我创建一个内容完全相同但没有 clasp的 GAS 项目,则会doSomething()按预期触发。
  3. 如果我按以下方式推送没有 v8 引擎的代码,那么一切正常。
    • "runtimeVersion": "V8"从中删除appsscript.json
    • 从项目中删除tsconfig.json文件。

有什么我想念的吗?

更新(2020/04/18)

我在问题跟踪器上创建了问题。
https://issuetracker.google.com/154366756

4

0 回答 0