読者です 読者をやめる 読者になる 読者になる

valid,invalid

関心を持てる事柄について

wait~リトライを行う処理

JavaScript

クライアントサイドJavaScriptでwait処理に相当するものが必要になったので調べてみた。

そもそもJavaScriptにはwait / sleep に相当する関数が無いみたいだが、
遅延処理を実現する setInterval() / clearInterval() の2つのメソッドにて同様の関数を実装できると判明。

今回は純粋なwait処理だけでなく、非同期に行われる処理との同期をとるためのチェックも行える必要があったのでこんな関数を書いた。


/*
* 条件を満たすか、指定回数だけリトライするまで待つ
* ループ処理としても使える
* [引数] test :終了条件を満たすかどうか判断する関数
* callback :終了条件を満たした後に呼び出す関数
* time :ポーリングタイム(ms)
* retry :リトライ回数
*/
function wait(test,callback,time,retry) {
// リトライ指定が無い場合はデフォルト回数を設定
if(retry === undefined) { retry = 3; }

var count = 0;

// wait条件を満たすまで繰り返す処理
var process = function() {
count++;
if(test() || (count > max)) {
clearInterval(timer);
callback();
}
};
var timer = setInterval(process(),time);
}


参考にしたサイトでも指摘されていたが、時刻の取得→比較を繰り返すのはブラウザが固まってしまうアンチパターンなのでNG。

普段はJavaばかり書いてるので、JavaScriptクロージャを意識したコードを書くの楽しい。

【参考】
【JavaScript】処理の実行タイミングを遅らせる方法 | Web制作会社スタイル
遅延実行 | JavaScript プログラミング解説
javascript で wait処理 - 新みのる日記