问题
如果我使用 clasp typescript 项目,GAS v8 引擎上的嵌套触发器将不起作用。“嵌套触发器”是指由另一个计划函数以编程方式创建的计划函数。
- 扣:v2.3.0
如何重现
- 创建扣项目
clasp create --type standalone
- 创建一个
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");
}
- 创建一个
tsconfig.json
包含以下内容的 json 文件:
{
"compilerOptions": {
"lib": ["esnext"],
"target": "ES2019",
"experimentalDecorators": true
}
}
- 推送代码
clasp push
- 每 5 分钟设置一次触发
schedule()
功能,以便每 5 分钟doSomething()
触发一次。
但实际上doSomething()
并没有触发。触发器已设置,但将因未知原因而被禁用。
笔记
- 如果我手动执行
schedule()
,doSomething()
则按预期触发。 - 如果我创建一个内容完全相同但没有 clasp的 GAS 项目,则会
doSomething()
按预期触发。 - 如果我按以下方式推送没有 v8 引擎的代码,那么一切正常。
"runtimeVersion": "V8"
从中删除appsscript.json
- 从项目中删除
tsconfig.json
文件。
有什么我想念的吗?
更新(2020/04/18)
我在问题跟踪器上创建了问题。
https://issuetracker.google.com/154366756