Google apps script addTimer无法与GAS中的全局应用程序一起工作
我读过关于(未记录的)addTmer的文章,并想用它来更新UI 上的例子确实很有效Google apps script addTimer无法与GAS中的全局应用程序一起工作,google-apps-script,Google Apps Script,我读过关于(未记录的)addTmer的文章,并想用它来更新UI 上的例子确实很有效 // This code works function doGet(e) { var app = UiApp.createApplication().setTitle('Test addTimer - createApplication in doget'); var appLocal = app; var handler = appLocal.createServerHandler("update")
// This code works
function doGet(e)
{
var app = UiApp.createApplication().setTitle('Test addTimer - createApplication in doget');
var appLocal = app;
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 4000);
var label = appLocal.createLabel(new Date()).setId("label");
appLocal.add(label);
return appLocal;
}
function update(e)
{
var appLocal = UiApp.getActiveApplication();
// var appLocal = app;
appLocal.getElementById("label").setText(new Date());
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 1000);
return appLocal;
}
但如果我将createApplication从doGet()移到全局变量中,则在运行时会发生“意外错误”。
没有addTimer,可以将createApplication从doget()移动到全局范围
// This code will crash at runtime
var app = UiApp.createApplication().setTitle('Test addTimer , createApplication outside doGet');
function doGet(e)
{
var appLocal = app;
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 4000);
var label = appLocal.createLabel(new Date()).setId("label");
appLocal.add(label);
return appLocal;
}
function update(e)
{
var appLocal = UiApp.getActiveApplication();
// var appLocal = app;
appLocal.getElementById("label").setText(new Date());
var handler = appLocal.createServerHandler("update");
appLocal.addTimer(handler , 1000);
return appLocal;
}
正如我在全球看到的
var-app=createApplication()代码>
我想更多的人也会喜欢使用addTimer,我在这里发布了我的经验
也许有人可以解释为什么这是一个问题。当您在任何函数之外调用服务时,每次调用任何函数时都会执行此调用,也就是说,当调用doGet
时,也就是当调用处理函数时,以及当计时器触发脚本执行时
这意味着您正在调用UiApp.createApplication()
2次(或更多次)。。。这不是一个好主意,会产生“意外错误”
顺便问一下,这种方法的优势是什么
Uiapp设计用于处理主服务调用和处理程序,每个处理程序使用getActiveApplication()
获取活动实例,为什么要尝试以不同的方式使用它?如果定义全局变量var app=Uiapp.createApplication(),Uiapp.createApplication()真的会被调用X次吗;那确实是非常不礼貌的。使用全局变量的优点是,您可以在每个函数中使用'app',而无需添加var app=UiApp.getActiveApplication();在每个功能中。我已经更改了它=,并且它可以工作。是的,它确实会运行多次。您可以在“全局”调用中轻松地使用电子表格和更改单元格颜色,并在调用任何函数时查看工作表。