Array.prototype.eachLater

LDRで使われている、Function.prototype.later(via *「ふっかつのじゅもんがちがいます。」)にインスパイアされて、Array.prototype.eachLaterを書いてみました。

Array.prototype.eachLater = function(ms,call,callback,ob){
	var self = this;
	var obj = ob || typeof(callback) != 'function' ? callback : null;
	var res = {
		complete: false,
		cancel: function(){
			clearInterval(PID);
		},
		notify: function(){
			clearInterval(PID);
			if (endCallback && typeof(endCallback) == 'function') callback.call(obj,self);
		}
	};
	var len = self.length;
	var i = 0;
	var PID = setInterval(function(){
		try{
			call.call(obj,self[i],i);
		} catch (e) {
		} finally {
			i++;
			if (i >= len) {
				clearInterval(PID);
				res.complete = true;
				if(callback && typeof(callback) == 'function') callback.call(obj,self);
			}
		}
	},ms);
	return res;
}
// Arrayを汚染しないようにするなら、こっち
var eachLater = function(arr,ms,call,callback,ob) {
	var self = arr;
	var obj = ob || typeof(callback) != 'function' ? callback : null;
	var res = {
		complete: false,
		cancel: function(){
			clearInterval(PID);
		},
		notify: function(){
			clearInterval(PID);
			if (callback && typeof(callback) == 'function') callback.call(obj,self);
		}
	};
	var len = self.length;
	var i = 0;
	var PID = setInterval(function(){
		try{
			call.call(obj,self[i],i);
		} catch (e) {
		} finally {
			i++;
			if (i >= len) {
				clearInterval(PID);
				res.complete = true;
				if(callback && typeof(callback) == 'function') callback.call(obj,self);
			}
		}
	},ms);
	return res;
}

配列を時間差で処理するだけの簡単な関数です。

var arr = [1,2,3];
arr.eachLater(1000,function(a){console.log(a);});

とりあえず、やろうとしていたことはこれで実現できたので公開。
使ってるうちに改良していくと思います。