【问题标题】:Why function in a loop is working only once?为什么循环中的函数只能工作一次?
【发布时间】:2015-09-30 09:38:33
【问题描述】:

我正在使用 Google App Script 和 JQuery 制作进度条。 当我点击提交时,以下代码运行:

    var i=0;
    while (i<100){
      var prog=google.script.run.countTime();
      i+=prog;
      button.progressIncrement(i);
    }

进度条只进到 10% 就停止执行。

countTime() 函数不是很重要(暂时只返回 10):

function countTime(){
   return 10;
}

但如果我删除该功能,它会起作用(100%):

 while (i<100){
    var prog=10;
    i+=prog;
    button.progressIncrement(i);
 }

如果我删除循环并编写如下内容:

    var i=0;
    var prog=google.script.run.countTime();
    i+=prog;
    button.progressIncrement(i);
    var prog=google.script.run.countTime();
    i+=prog;
    button.progressIncrement(i);
    var prog=google.script.run.countTime();
    i+=prog;
    button.progressIncrement(i);
    var prog=google.script.run.countTime();
    i+=prog;
    button.progressIncrement(i);
    var prog=google.script.run.countTime();
    i+=prog;
    button.progressIncrement(i);
    (....)

进度条也可以达到 100%。

while里面的函数有什么问题?

【问题讨论】:

  • 你试过调试吗?顺便说一句,以上所有内容在架构上都是错误的。
  • 我无法调试 html 文件,这里 Google Script 的唯一函数是 countTime()。什么是架构错误?

标签: javascript jquery loops google-apps-script progress-bar


【解决方案1】:

google.script.run() 不返回值,它异步运行。您将一个回调函数传递给它以通过withSuccessHandler() 从它那里取回一个值。例如在您的客户端代码中:

function onSuccess(valueFromServer) {

    // do something with valueFromServer
}

google.script.run.withSuccessHandler(onSuccess).doSomethingServerSide()

和服务器端:

function doSomethingServerSide() {
    return valueFromServer
}

【讨论】:

  • 此外,您可以同时向服务器发起的呼叫数量是有配额的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 2011-04-13
  • 2021-03-30
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
相关资源
最近更新 更多