Saya tidak yakin script ini memiliki fungsi yang signifikan atau tidak atau bahkan mubazir. Yang terbayang di awal adalah bagaimana cara mengontrol para proses yang seharusnya memiliki batasan. Terutama proses-proses yang memiliki ketergantungan terhadap sukses tidaknya proses yang lainnya. Sehingga bisa diambil keputusan selanjutnya.
Tapi tak apalah. Maju terus pantang mundur .. Ooye !!!
Script ini bila dijalankan akan membentuk object dengan nama oListener.
Ia memiliki beberapa method, yaitu:
add(sName,event)
sName adalah nama proses yang diregistrasikan berupa string. Yang berfungsi untuk penanda proses.
event berupa object dengan susunan sebagai berikut:
- timeout,
adalah waktu timeout dalam milisecond. - interval,
adalah interval waktu periodik yang akan digunakan setInterval dalam milisecond - onProgress,
adalah function yang dieksekusi selama proses looping - onDone,
adalah function yang dieksekusi bila proses selesai - onTimeout,
adalah function yang dieksekusi bila melampaui waktu timeout
done(sName)
adalah method yang akan menghapus atau menghentikan proses interval
isTimeout(sName
adalah method untuk memerilksa apakah nilai timeout sidah tercapai.
Script lengkapnya adalah sebagai berikut:
(function(){
var oListener={
listeners:[],timeout:30000,interval:1000,
/*
event:{
onProgress:function(){},
onDone:function(){},
onTimeout:function(){}
}
*/
add:function(sName,event){
var ls=this.listeners,l,lang=oUtil;
if(!lang.isString(sName)){throw new Error("sName not string")}
if(!lang.trim(sName)){throw new Error("sName was empty")}
if(ls[sName]){return 0;}
try{
if(!event){
event={
onProgress: function(){},
onDone: function(){},
onTimeout: function(){}
};
}else{
event={
onProgress:event.onProgress||function(){},
onDone:event.onDone||function(){},
onTimeout:event.onTimeout||function(){}
};
};
}catch(e){new Error(e)}
ls[sName]={
idInterval:"",
count:0,
done:0,
event:event
};
l=ls[sName];
l.idInterval=setInterval(function(){
var oL=oListener, ls=oL.listeners,l=ls[sName],m,ev=l.event;
if(md[sName]){
oL.done(sName);
ev.onDone(sName);
}
else{
if(oL.isTimeout(sName))
{
oL.done(sName);
ev.onTimeout(sName);
}else{
ev.onProgress(sName);
};
}
},this.interval);
return 1;
},
done:function(sName){
var ls=this.listeners,l,lang=oUtil;
if(!lang.isString(sName)){throw new Error("sName not string")}
if(!lang.trim(sName)){throw new Error("sName was empty")}
if(!ls[sName]){return;}
clearInterval(ls[sName].idInterval);
delete ls[sName];
},
isTimeout:function(sName){
var ls=this.listeners,l,Timeout=this.timeout;
if(!ls[sName]){throw new Error("Listener with name "+sName+" was not found")}
l=ls[sName];
l.count+=this.interval;
if(l.count >= Timeout){return 1;};
return 0;
}
};
})();
Contoh pemakaian:
oListener.add("myProcess",{
onProgress:function(){},
onDone:function(){},
onTimeout:function(){alert("Aduh mak timeout");}
})
Script diatas akan menampilkan window alert setelah timeout tercapai.
Contoh yang lain:
oListener.add("myProcess",{
onProgress:function(namanya){
var pTimeoutCut=5000,ls=oListener.listeners,oL=oListener,m;
if(!ls[namanya]){oL.done(namanya);alert('Nama proses tidak dikenal');}
m=ls[namanya];
if(m.count>=pTimeoutCut){
oL.done(namanya);
alert('Berhasil memotong waktu time out dari "+oL.timeout+" menjadi "+pTimeoutCut);
}
},
onDone:function(){},
onTimeout:function(){alert("Aduh mak timeout");}
})
Script diatas akan menampilkan window alert yang dihasilkan oleh event onProgress setelah 5 detik.
Pssst …. script ini butuh oUtil lho
Semoga membantu.


makasih mas atas ilmunya
mampir dan numpang baca..