npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

easy-loop

v1.7.2

Published

Easy sync loop processing for Node.js

Downloads

654

Readme

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
*/