2016-12-30 52 views
1

我想在while循环中使用google.script.run, the asynchronous client-side JavaScript API provided by Google Scripts。我明白,调用google.script.run是异步的,所以我甚至尝试使用全局变量'window.i'进行循环迭代。增量while循环成功异步google.script.run

不幸window.i ++从来没有发生,当我运行此代码时,浏览器冻结。

下面是我与挣扎的代码片段:

var iterations = 5; 
window.i = 0; 
while (window.i < iterations) { 
    google.script.run 
    .withSuccessHandler(function(){ 
     window.i++; 
    }) 
    .sendNow(); 
} 

有没有什么办法可以增加成功的回调循环变量?

+0

为什么你想要它的异步成功处理程序?为什么不在外部和while循环中增加它?因为while循环不会等待异步成功回调。它会继续执行循环,最终您的浏览器将挂起 – kumkanillam

+0

@kumkanillam,它将立即启动所有请求。 sendNow()是顺序的,这很重要。因为在第一次运行之后只处理剩余的记录。 –

回答

2

使用成功处理程序发送下一个请求。不要使用while循环。

//these dont have to be global 
var i = 0; 
var iterations = 5; 
function send() { 
    google.script.run 
    .withSuccessHandler(function() { 
    i++; 
    if (i < iterations) { 
     send(); 
    } 
    }) 
    .sendNow(); 
} 
+0

谢谢!我目前没有配额,所以无法测试。将在一天结束时使用此方法进行一些测试,然后回复给您。 –

+0

我用'setTimeout'测试了它 – Kerndog73

+0

太棒了!这工作得很好! –