Data-JPack
view release on metacpan or search on metacpan
share/js/01-workerpool.js view on Meta::CPAN
let promise=new Promise((resolve, reject)=>{
resolver=resolve;
rejecter=reject;
});
this.requestQueue.push({name,arg,transfer,resolver,rejecter});
this._executeNext();
return promise;
}
_executeNext(){
//console.log("is busy", this.isBusy);
if((!this.isBusy) && (this.requestQueue.length>0)){
//console.log(`POSTING TO WORKER ${this.id}`);
this.isBusy=true;
let r=this.requestQueue.shift();
this.responseQueue.push(r);
//console.log("_in execute next", r);
try {
this.worker.postMessage({cmd:"callFunction",name:r.name, arg:r.arg },r.transfer);
}
catch(e){
let er={data:{name:"error", result:undefined}};
// Could not send message, probably a bad argument. Make as not busy
let r=this.responseQueue.shift();
//console.log(`Response from worker ${this.id}`);
r.rejecter(er);
this.isBusy=false;
this._executeNext(); //Trigger the queue again
}
}
}
}
( run in 1.429 second using v1.01-cache-2.11-cpan-39bf76dae61 )