goog.async.Dealy を使うと一定時間後にある関数を呼び出すことができる。
Delay (Closure Library API Documentation - JavaScript)
<script> goog.require('goog.dom'); goog.require('goog.async.Delay'); </script> <script> function output(msg) { var console = goog.dom.$('console'); console.innerHTML = console.innerHTML + msg + " "; } var counter_ = 1; var delay = new goog.async.Delay( function() { output("count: " + counter_++); delay.start(); }, 1000); delay.start(); </script>
呼び出された関数内でさらに start() を呼び出すと、一定間隔で繰り返し関数を呼ぶことができる。
goog.async.ConditionalDelay
こちらは条件付きの Delay が作れる。コールバック関数の戻り値が true になるまでは指定した時間間隔で関数が呼び出され続ける。
ConditionalDelay (Closure Library API Documentation - JavaScript)
戻り値に false を固定で返せば延々と一定間隔で呼び出され続けるが、タイムアウトを設定することもできる。一定間隔でリトライをかけるような通信処理などに使えそうだ。
onSuccess, onFailure に成功時、失敗時(タイムアウト)の処理を書くこともできる。
サンプル:
<script> goog.require('goog.dom'); goog.require('goog.async.ConditionalDelay'); </script> <script> function output(msg) { var console = goog.dom.$('console'); console.innerHTML = console.innerHTML + msg + "<br/>"; } var counter_ = 1; var delay = new goog.async.ConditionalDelay( function() { output("count: " + counter_++); return counter_ >= 10;; }); delay.onSuccess = function() { alert('good job!');}; delay.onFailure = function() { alert('timeout');}; delay.start(1000, 5000); </script>
start( ) の第2引数はデフォルトで0。これは0秒を表していて1回実行後は必ずタイムアウトになる(1回だけ実行したい場合に使える)。タイムアウト無しにする場合は負の値を指定する。
以下はソースコードのコメントから引用。
* Example: * * function deferred() { * var succeeded = false; * // ... custom code * return succeeded; * } * * var deferredCall = new goog.async.ConditionalDelay(deferred); * deferredCall.onSuccess = function() { * alert('Success: The deferred function has been successfully executed.'); * } * deferredCall.onFailure = function() { * alert('Failure: Time limit exceeded.'); * } * * // Call the deferred() every 100 msec until it returns true, * // or 5 seconds pass. * deferredCall.start(100, 5000); * * // Stop the deferred function call (does nothing if it's not active). * deferredCall.stop();
0 件のコメント:
コメントを投稿