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 )