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');
loop.series([
function(callback){
var result = "success";
callback(null, result);
},
...], function(err, results){
});
loop.parallel({
one : function(callback){
var result = "success";
callback(null, result);
},
...}, function(err, results){
});
loop.waterfall([
function(callback){
var arg1 = 1;
callback(null, arg1);
},
function(arg, callback){
var arg1 = 2;
callback(null, arg, arg1);
},
function(arg1, arg2, callback){
var arg1 = 3;
callback(null, arg1);
}], function(err, results){
});
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();
}, 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");
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");
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)");
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");
var arr = [];
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");
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");
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");
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");
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();
}, 1000);
}, function(err){
console.log("err : ", err);
console.log("Case 9 result");
console.log("Result : Now Second : ", new Date().getSeconds());
});
console.log("Case9 End");
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();
}, 1000);
}
console.log("Case10 End");
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");
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");
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");
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");
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");