I have a function that should like
function longFunc(par1,par2)
{
var retVal = [], stopReq = false;
function evtLs() { stopReq = true; }
something.on("event", evtLs);
for(var i=0;i<possibleResults1.length;i++) {
if(isValid(possibleResults1[i]))
retVal.push(possibleResults1[i]);
}
if(stopReq) return retVal;
if(canAddResult2()) {
for(var i=0;i<possibleResults2.length;i++) {
if(isValid(possibleResults2[i]))
retVal.push(possibleResults2[i]);
}
if(stopReq) return retVal;
} else {
for(var i=0;i<possibleResults3.length;i++) {
if(isValid(possibleResults3[i]))
retVal.push(possibleResults3[i]);
}
if(stopReq) return retVal;
}
something.removeListener("event", evtLs);
return retVal;
}
My problem is that, obliviously the event is never emitted because the process is engaged in longFunc.
How can I convert it to allow event emitting?
Here a testable example:
var cancelled = false;
setTimeout(() => cancelled = true,1000);
function main()
{
var ret = []
var totalStart =Date.now();
for(var i=0;i<20;i++)
{
var v
var start = Date.now();
while((Date.now()-start)<100)
{
v=Math.sqrt(Math.random());
}
ret.push(v);
if(cancelled) break;
}
console.log("delta:"+(Date.now()-totalStart));
return ret;
}
var r = main()
console.log(r.length)
I expect that stop after 1000, but instead stops after 2000.