というわけで、作ってみました
2017.03.24 (金) 10:00
ugnag
重い処理はループではなく、ループ内の処理を
毎回setTimeoutで実行させる必要があることが判明。
(いまさらでしたが。。。)
書き方のパターンはあるのだが結構めんどいので、
一般化し、さらにjQueryプラグインの形にしてみた。
せっかくなので、他にも関連機能を付けたプラグインにしてみた。
機能(メソッド)としては、
・非同期ループ処理の実行
・非同期ループのタスクのキュー処理
・タスクオブジェクトのラッパーオブジェクトの作成
・拡張タイムスタンプオブジェクトの管理オブジェクトの作成
となりました。
●非同期ループ処理の実行
メソッド名:loop
ループ処理を閉じ込めたオブジェクト(タスクと呼ぶことにします)を引数として実行します。
タスクオブジェクトは次のフィールドを必要とします。
・(数値)intervalTime :
・(関数)preProc:ループ開始前に呼び出される
・(関数)isContinue(counter):ループを継続するかを返す
・(関数)doLoop(counter):ループ処理本体
・(関数)endProc(counter):ループ終了後に呼び出される
isContinue以外は無くてもOKだが、doLoopは定義しないと意味がない。
使用例:
$.asyncLoop('loop',
{
isContinue:function(ix){
return ix
},
doLoop:function(ix){
$('#test1').text(ix);
},
});
●非同期ループのタスクのキュー処理
メソッド名:queue
キューを管理するオブジェクトを作成する。
このオブジェクトには、
・タスクの追加(実行タスクがなければ、即時実行される)
・登録タスク数の取得
・全タスクが終了した際に呼び出されるリスナーの追加
という機能があります。
使用例:
var queue = $ayncLoop('queue');
queue.add(
{
isContinue:function(ix){
return ix
},
doLoop:function(ix){
[7] beginning... [9] >>
[1] comments (0)
-
[0] [top]