Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script addTimer无法与GAS中的全局应用程序一起工作_Google Apps Script - Fatal编程技术网

Google apps script addTimer无法与GAS中的全局应用程序一起工作

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")

我读过关于(未记录的)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");
  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();在每个功能中。我已经更改了它=,并且它可以工作。是的,它确实会运行多次。您可以在“全局”调用中轻松地使用电子表格和更改单元格颜色,并在调用任何函数时查看工作表。