easy-loop

    1.7.2 • Public • Published

    easy-loop

    * 쉬운 동기식 반복처리
    * 선택적 병렬처리
    

    iteration function

    1) Method
    	: 모두 같은 동작이며 편리한 메소드를 호출하세요.
    	
    	var loop = require('easy-loop');
    	loop(arg, arg [, arg, arg]) == loop.for() == loop.while()		
    	
    2) Arguments	
    	(1) Array or Object or function or iteration number	- require
    	(2) process function 	- require
    	(3) concurrency	number 	- option (default : 1)
    	(4) callback function 	- option (default : nothing)
    	
    	* TIP : arg2 와 arg3 의 인자값은 순서 변경 가능(arg3 and arg3 can be swap)
    

    series or parallel or waterfall function

    1) Method
    	var loop = require('easy-loop');
    	//series('function array or object' [, concurrency] [, callback]) -> 'concurrency' default 1
    	loop.series([
    		function(callback){
    			var result = "success";
    			callback(null, result);
    		},
    	...], function(err, results){
    		//err : undefined
    		//results : ["success"...]
    	});
    
    	loop.parallel({
    		one : function(callback){
    			var result = "success";
    			callback(null, result);
    		},
    	...}, function(err, results){
    		//err : undefined
    		//results : {"one":"success"...}
    	});
    
    	loop.waterfall([
    		function(callback){
    			var arg1 = 1;				
    			callback(null, arg1);
    		},
    		function(arg, callback){
    			//console.log(arg) => 1
    			var arg1 = 2;				
    			callback(null, arg, arg1);
    		},
    		function(arg1, arg2, callback){
    			//console.log(arg1, arg2) => 1, 2
    			var arg1 = 3;				
    			callback(null, arg1);
    		}], function(err, results){
    		//err : undefined
    		//console.log(results) => 3
    	});
    
    2) Arguments
    	(1) Array or Object (waterfall only Array) - require
    	(2) callback function - option
    

    Examples

    var loop = require('easy-loop');
    
    var arr = [1,2,3,4,5];
    console.log("Case1 Start => Array and 3 arguments");
    console.log("Start : Now Second : ", new Date().getSeconds());
    loop(arr, function(i, value, next){
    	setTimeout(function(){
    		console.log(i, "=>", value, " , Date : ", new Date().getSeconds());
    		next();	//require
    	}, 1000);
    }, function(err){
    	console.log("err : ", err);
    	console.log("Case 1 result");
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case1 End => Array");
    
    /* 결과(Result) - 5초 소요(run time : 5 second)
    Case1 Start => Array and 3 arguments
    Start : Now Second :  54
    Case1 End => Array
    0 '=>' 1 ' , Date : ' 55
    1 '=>' 2 ' , Date : ' 56
    2 '=>' 3 ' , Date : ' 57
    3 '=>' 4 ' , Date : ' 58
    4 '=>' 5 ' , Date : ' 59
    err :  undefined
    Case 1 result
    Result : Now Second :  59
    */
    
    
    
    
    var arr = [1,2,3,4,5];
    console.log("Case2 Start => Array and 2 arguments");
    loop.for(arr, function(i, value, next){
    	setTimeout(function(){
    		console.log(i, "=>", value);	
    		next();		
    	}, 1000);
    });
    console.log("Case2 End => Array and 2 arguments");
    
    /* 결과(Result) - 5초 소요(run time : 5 second)
    Case2 Start => Array and 2 arguments
    Case2 End => Array and 2 arguments
    0 '=>' 1
    1 '=>' 2
    2 '=>' 3
    3 '=>' 4
    4 '=>' 5
    */
    
    
    
    
    var arr = [1,2,3,4,5];
    console.log("Case3 Start => Array and error(or break) and 3 arguments");
    loop(arr, function(i, value, next){
    	setTimeout(function(){
    		console.log(i, "=>", value);
    		if(i === 2)	next("error or break");
    		else		next();
    	}, 1000);
    }, function(err){
    	console.log("err : ", err);
    	console.log("Case 3 result");
    });
    console.log("Case3 End => Array and error(or break)");
    
    /* 결과(Result) - 3초 소요(run time : 3 second)
    Case3 Start => Array and error(or break) and 3 arguments
    Case3 End => Array and error(or break)
    0 '=>' 1
    1 '=>' 2
    2 '=>' 3
    err :  error or break
    Case 3 result
    */
    
    
    
    
    var obj = {a:1,b:2,c:3,d:4,e:5};
    console.log("Case4 Start => Object and 3 arguments");
    loop(obj, function(key, value, next){
    	setTimeout(function(){
    		console.log(key, "=>", value);
    		next();
    	}, 1000);
    }, function(err){
    	console.log("err : ", err);
    	console.log("Case 4 result");
    });
    console.log("Case4 End => Object");
    
    /* 결과(Result) - 5초 소요(run time : 5 second)
    Case4 Start => Object and 3 arguments
    Case4 End => Object
    a => 1
    b => 2
    c => 3
    d => 4
    e => 5
    err :  undefined
    Case 4 result
    */
    
    
    
    
    
    var arr = [];	// or {}
    console.log("Case5 Start => Empty Array and 3 arguments");
    loop(arr, function(i, value, next){
    	setTimeout(function(){
    		console.log(i, "=>", value);
    		next();
    	}, 1000);
    }, function(err){
    	console.log("err : ", err);
    	console.log("Case5 result");
    });
    console.log("Case5 End => Empty Array");
    
    /* 결과(Result) - 0초 소요(run time : 0 second)
    Case5 Start => Empty Array and 3 arguments
    err :  undefined
    Case5 result
    Case5 End => Empty Array
    */
    
    
    
    
    
    var arr = [1,2,3,4,5];
    console.log("Case6 Start => concurrency and 4 arguments");
    console.log("Start : Now Second : ", new Date().getSeconds());
    loop(arr, function(i, value, next){
    	setTimeout(function(){
    		console.log(i, "=>", value, " , Date : ", new Date().getSeconds());
    		next();
    	}, 1000);
    }, 3, function(err){
    	console.log("err : ", err);
    	console.log("Case 6 result");
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case6 End => concurrency");
    
    /*
    *Tip : arguments(arr, function, concurrency, callback) == arguments(arr, concurrency, function, callback) 
    결과(Result) - 2초 소요(run time : 2 second)
    Case6 Start => concurrency and 4 arguments
    Start : Now Second :  3
    Case6 End => concurrency
    0 '=>' 1 ' , Date : ' 4
    1 '=>' 2 ' , Date : ' 4
    2 '=>' 3 ' , Date : ' 4
    3 '=>' 4 ' , Date : ' 5
    4 '=>' 5 ' , Date : ' 5
    err :  undefined
    Case 6 result
    Result : Now Second :  5
    */
    
    
    
    
    
    
    var num = 0;
    console.log("Case7 Start => while and 3 arguments");
    console.log("Start : Now Second : ", new Date().getSeconds());
    loop.while(function(){
    	return num < 5;
    }, function(next){
    	setTimeout(function(){
    		console.log("Date : ", new Date().getSeconds());
    		num++;
    		next();
    	}, 1000);
    }, function(err){
    	console.log("err : ", err);
    	console.log("Case 7 result");
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case7 End");
    
    /*
    결과(Result) - 5초 소요(run time : 5 second)
    Case7 Start => while and 3 arguments
    Start : Now Second :  20
    Case7 End
    Date :  21
    Date :  22
    Date :  23
    Date :  24
    Date :  25
    err :  undefined
    Case 7 result
    Result : Now Second :  25
    */
    
    
    
    
    var num = 0;
    console.log("Case8 Start => while and 3 arguments and break(or error)");
    console.log("Start : Now Second : ", new Date().getSeconds());
    loop.while(function(){
    	return num < 5;
    }, function(next){
    	setTimeout(function(){
    		console.log("Date : ", new Date().getSeconds());
    		num++;
    		next(num === 1 ? true : false);
    	}, 1000);
    }, function(err){
    	console.log("err : ", err);
    	console.log("Case 8 result");
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case8 End");
    
    /*
    Case8 Start => while and 3 arguments and break(or error)
    Start : Now Second :  21
    Case8 End
    Date :  22
    err :  true
    Case 8 result
    Result : Now Second :  22
    */
    
    
    
    console.log("Case9 Start => When only know the number of iterations. 2 arguments or 3 arguments(concurrency) and break possible");
    console.log("Start : Now Second : ", new Date().getSeconds());
    var loopCount = 5;
    loop(loopCount, function(i, next){
    	setTimeout(function(){
    		console.log(i, "Date : ", new Date().getSeconds());
    		next();	// break => next(err);
    	}, 1000);
    }, function(err){
    	console.log("err : ", err);
    	console.log("Case 9 result");
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case9 End");
    
    /*
    Case9 Start => When only know the number of iterations. 2 arguments or 3 arguments(concurrency) and break possible
    Start : Now Second :  23
    Case9 End
    0 'Date : ' 24
    1 'Date : ' 25
    2 'Date : ' 26
    3 'Date : ' 27
    4 'Date : ' 28
    err :  undefined
    Case 9 result
    Result : Now Second :  28
    */
    
    
    
    
    console.log("Case10 Start => When only know the number of iterations. break possible");
    console.log("Start : Now Second : ", new Date().getSeconds());
    var handle = loop.create(10, function(err){
    	console.log("err : ", err);
    	console.log("Case 10 result");
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    for(var i=0; i<10; i++)
    {
    	setTimeout(function(){
    		console.log("Date : ", new Date().getSeconds());
    		handle.next();	// break => handle.next(err);
    	}, 1000);
    }
    console.log("Case10 End");
    
    /*
    Case10 Start => When only know the number of iterations
    Start : Now Second :  20
    Case10 End
    Date :  21
    Date :  21
    Date :  21
    Date :  21
    Date :  21
    Date :  21
    Date :  21
    Date :  21
    Date :  21
    Date :  21
    err :  undefined
    Case 10 result
    Result : Now Second :  21
    */
    
    
    
    
    console.log("Case11 Start => Array. Like as 'async.series' of async module. If the error is when to stop.");
    console.log("Start : Now Second : ", new Date().getSeconds());
    var arr = [
    	function(callback){
    		console.log("start series");
    		callback();
    	},
    	function(callback){
    		setTimeout(function(){
    			console.log(100);
    			callback(null, 100);
    		}, 1000);
    	}, function(callback){
    		setTimeout(function(){
    			console.log(200);
    			callback(null, 200);
    		}, 1000);
    	}
    ];
    loop.series(arr, function(err, results){
    	console.log("err : ", err);
    	console.log("results : ", JSON.stringify(results));
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case11 End");
    
    /*
    Case11 Start => Array. Like as 'async.series' of async module. If the error is when to stop.
    Start : Now Second :  50
    start series
    Case11 End
    100
    200
    err :  undefined
    results :  [null,100,200]
    Result : Now Second :  52
    */
    
    
    
    
    console.log("Case12 Start => Object. Like as 'async.series' of async module. If the error is when to stop.");
    console.log("Start : Now Second : ", new Date().getSeconds());
    var obj = {
    	one :	function(callback){
    		console.log("start series");
    		callback();
    	},
    	two : function(callback){
    		setTimeout(function(){
    			console.log(100);
    			callback(null, 100);
    		}, 1000);
    	}, 
    	three : function(callback){
    		setTimeout(function(){
    			console.log(200);
    			callback(null, 200);
    		}, 1000);
    	}
    };
    loop.series(obj, function(err, results){
    	console.log("err : ", err);
    	console.log("results : ", JSON.stringify(results));
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case12 End");
    
    /*
    Case12 Start => Object. Like as 'async.series' of async module. If the error is when to stop.
    Start : Now Second :  38
    start series
    Case12 End
    100
    200
    err :  undefined
    results :  {"one":null,"two":100,"three":200}
    Result : Now Second :  40
    */
    
    
    
    
    
    console.log("Case13 Start => Array. Like as 'async.parallel' of async module. If the error is when to stop.");
    console.log("Start : Now Second : ", new Date().getSeconds());
    var arr = [
    	function(callback){
    		console.log("start parallel");
    		callback();
    	},
    	function(callback){
    		setTimeout(function(){
    			console.log(100);
    			callback(null, 100);
    		}, 500);
    	}, function(callback){
    		setTimeout(function(){
    			console.log(200);
    			callback(null, 200);
    		}, 500);
    	}
    ];
    loop.parallel(arr, function(err, results){
    	console.log("err : ", err);
    	console.log("results : ", JSON.stringify(results));
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case13 End");
    
    /*
    Case13 Start => Array. Like as 'async.parallel' of async module. If the error is when to stop.
    Start : Now Second :  55
    start parallel
    Case13 End
    100
    200
    err :  undefined
    results :  [null,100,200]
    Result : Now Second :  55
    */
    
    
    
    
    console.log("Case14 Start => Object. Like as 'async.parallel' of async module. If the error is when to stop.");
    console.log("Start : Now Second : ", new Date().getSeconds());
    var obj = {
    	one :	function(callback){
    		console.log("start parallel");
    		callback();
    	},
    	two : function(callback){
    		setTimeout(function(){
    			console.log(100);
    			callback(null, 100);
    		}, 500);
    	}, 
    	three : function(callback){
    		setTimeout(function(){
    			console.log(200);
    			callback(null, 200);
    		}, 500);
    	}
    };
    loop.parallel(obj, function(err, results){
    	console.log("err : ", err);
    	console.log("results : ", JSON.stringify(results));
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case14 End");
    
    /*
    Case14 Start => Object. Like as 'async.parallel' of async module. If the error is when to stop.
    Start : Now Second :  59
    start parallel
    Case14 End
    100
    200
    err :  undefined
    results :  {"one":null,"two":100,"three":200}
    Result : Now Second :  59
    */
    
    
    
    
    console.log("Case15 Start => Array(or Object). Like as 'async.series'. But sub functions run parallel.");
    console.log("Start : Now Second : ", new Date().getSeconds());
    var obj = [
    	[
    		function(cb){
    			setTimeout(function(){console.log(new Date().getSeconds(), "sub1");
    			cb(null, "sub1");}, 1000)
    	}, 
    		function(cb){
    			setTimeout(function(){console.log(new Date().getSeconds(), "sub2");
    			cb(null, "sub2");}, 1000)
    		}
    	],
    	function(callback){
    		setTimeout(function(){
    			console.log(new Date().getSeconds(), 100);
    			callback(null, 100);
    		}, 1000);
    	}, 
    	function(callback){
    		setTimeout(function(){
    			console.log(new Date().getSeconds(), 200);
    			callback(null, 200);
    		}, 1000);
    	}
    ];
    loop.series(obj, function(err, results){
    	console.log("err : ", err);
    	console.log("results : ", JSON.stringify(results));
    	console.log("Result : Now Second : ", new Date().getSeconds());
    });
    console.log("Case15 End");
    
    /*
    Case15 Start => Array(or Object). Like as 'async.series'. But sub functions run
    parallel.
    Start : Now Second :  59
    Case15 End
    0 'sub1'
    0 'sub2'
    1 100
    2 200
    err :  undefined
    results :  [["sub1","sub2"],100,200]
    Result : Now Second :  2
    */

    Install

    npm i easy-loop

    DownloadsWeekly Downloads

    210

    Version

    1.7.2

    License

    MIT

    Last publish

    Collaborators

    • humy2833