/*
* 비동기 관리자
* 작성자 : jser.me
*
* 사용법:
* var asyncMg = require('./AsyncManager') ;
* asyncMg
* .push(function(next){
* some_aysnc_method().on('success'{
* next();
* .다음( );
* })
* })
* .push( ... )
* .run() //실행
* .on('success', function() {
* allThings_is_down();
* });
function typeOf( obj ){
return Object.prototype.toString.call( obj ).match(/[object ([^]]*)]/)[1];
}
함수 AsyncManager( arg ){
this.execArrys = [];
this.push( arg );
}
//시스템에서 제공하는 상속 방법 사용
require('util').inherits( AsyncManager, require('events').EventEmitter );
//성공적으로 실행된 함수 수 표시
AsyncManager.prototype.succCount = 0;
//추가
AsyncManager.prototype.push = function( arg ) {
var This = this;
if( typeOf(arg) == 'Array' ){
arg.forEach( function(v,i){
This.execArrys.push( v );
});
이것을 반환합니다. //1개 연결
};
//실행
AsyncManager.prototype.run = function(){
var self = this;
If( this.succCount == this.execArrys.length ) {
//모든 함수가 성공적으로 실행된 후 이벤트가 트리거됩니다.
this.emit( 'success' );
} else {
this.execArrys[ this.succCount ]( self.run.bind( self ) );
}
this.succCount ;
return this; //1개 연결
};
exports = module.exports = function( arg ){
return new AsyncManager( arg );
}