LoginSignup
3
3

More than 5 years have passed since last update.

非同期処理をcurryでまとめる

Last updated at Posted at 2013-05-23

カリー化関数を利用して非同期処理を整理する

//カリー化関数
function curry( orig_func ) {
        var ap = Array.prototype,
        args = arguments;

        function fn() {
                ap.push.apply( fn.args, arguments );

                return fn.args.length < orig_func.length
                ? fn
                : orig_func.apply( this, fn.args );
        };

        return function() {
                fn.args = ap.slice.call( args, 1 );
                return fn.apply( this, arguments );
        };
};

//出力
function log(d){
    console.log(d);
}


//非同期処理
var  Async1 = function(fn, nextFn) {
    $.ajax({
        url:'hoge1.html',
        dataType:'html',
        success:function(data){
          fn('async1');           //fn(data);
          nextFn();
        }                
    });
}

var  Async2 = function(fn, nextFn) {
    $.ajax({
        url:'hoge2.html',
        dataType:'html',
        success:function(data){
          fn('async2');          //fn(data);
           nextFn();
        }                
    });
}

var  Async3 = function(fn, nextFn) {
    $.ajax({
        url:'hoge3.html',
        dataType:'html',
        success:function(data){
          fn('async3');          //fn(data);
           nextFn();
        }                
    });
}

//end
var EndFn = function(){
   log('End'); 
}

//引数束縛
var async1=  curry(Async1 , log);
var async2=  curry(Async2 , log );
var async3=  curry(Async3 , log , EndFn);

//非同期処理を一つにまとめる
var root = curry(async1 , curry(async2, async3));

//実行
run()

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3