2016-12-30 5 views
1

whileループ内でgoogle.script.run, the asynchronous client-side JavaScript API provided by Google Scriptsを使用しようとしています。私はgoogle.script.runへの呼び出しが非同期であることを理解しているので、グローバル変数 'window.i'をループの繰り返しに使用しようとしました。非同期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

恐ろしいです!これはうまく動作します! –

関連する問題