というわけで、作ってみました

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]


[sb 1.10R]