function(callback,onEnd){
			//because next function is changing, we can't go this.next.bind(this)
			S.asyncWhile(function(){ this.next.apply(null,arguments); }.bind(this),callback,function(){
				this.close();
				onEnd && onEnd();
			}.bind(this));
		}
function(callback,onEnd){
			
			S.asyncWhile(function(){ this.next.apply(null,arguments); }.bind(this),callback,function(){
				this.close();
				onEnd && onEnd();
			}.bind(this));
		}
function ( callback , onEnd ) { //because next function is changing, we can't go this.next.bind(this) S . asyncWhile ( function ( ) { this . next . apply ( null , arguments ) ; } . bind ( this ) , callback , function ( ) { this . close ( ) ; onEnd && onEnd ( ) ; } . bind ( this ) ) ; }
/*next: ,
/ * next :