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 件のコメント:
コメントを投稿