const timeouts = {};
let timeoutcnt = 0;
const intervals = {};
let intervalcnt = 0;
function executeAfter(fn, timeout) {
const timeoutId = ++timeoutcnt;
const _this = this;
timeouts[timeoutId] = setTimeout(function () {
if (!timeouts[timeoutId]) {
return;
}
delete timeouts[timeoutId];
interpreter.queueFunction(fn, _this);
interpreter.run();
}, timeout);
return `timeout:${timeoutId}`;
}
javascriptGenerator.addReservedWords('executeAfter');
interpreter.setProperty(
globalObject,
'executeAfter',
interpreter.createNativeFunction(executeAfter)
);
function executeRepeatedly(fn, timeout) {
const intervalId = ++intervalcnt;
const _this = this;
intervals[intervalId] = setInterval(function () {
interpreter.queueFunction(fn, _this);
interpreter.run();
}, timeout);
return `interval:${intervalId}`;
}
javascriptGenerator.addReservedWords('executeRepeatedly');
interpreter.setProperty(
globalObject,
'executeRepeatedly',
interpreter.createNativeFunction(executeRepeatedly)
);
const clearTimeoutOrInterval = info => {
const [type, id] = info.split(':');
const _id = Number(id);
switch (type) {
case 'timeout':
clearTimeout(timeouts[_id]);
delete timeouts[_id];
break;
case 'interval':
clearInterval(intervals[_id]);
delete intervals[_id];
break;
default:
break;
}
};
javascriptGenerator.addReservedWords('clearTimeoutOrInterval');
interpreter.setProperty(
globalObject,
'clearTimeoutOrInterval',
interpreter.createNativeFunction(clearTimeoutOrInterval)
);
Thank you in advance.