Adding extra code to ensure more than one ready timer runs at a time. Exposed IgniteCallback to window.

This commit is contained in:
MattMo 2022-03-26 02:11:27 -07:00
parent e36ee1d42c
commit 5a1be0a368

View File

@ -523,21 +523,25 @@ class IgniteRenderingContext {
IgniteRenderingContext.ReadyCallbacks.push(callback); IgniteRenderingContext.ReadyCallbacks.push(callback);
//Clear the existing timer if there is one. //Clear the existing timer if there is one.
if (IgniteRenderingContext.ReadyTimer) { if (IgniteRenderingContext.ReadyTimer && !IgniteRenderingContext.ReadyTimerRunning) {
clearTimeout(IgniteRenderingContext.ReadyTimer); clearTimeout(IgniteRenderingContext.ReadyTimer);
} }
//Set a new timeout, it will only run once all elements are ready because //Set a new timeout, it will only run once all elements are ready because
//of the way single threaded timers work. //of the way single threaded timers work.
if (!IgniteRenderingContext.ReadyTimerRunning) {
IgniteRenderingContext.ReadyTimer = setTimeout(async () => { IgniteRenderingContext.ReadyTimer = setTimeout(async () => {
for (var i = 0; i < IgniteRenderingContext.ReadyCallbacks.length; i++) { IgniteRenderingContext.ReadyTimerRunning = true;
IgniteRenderingContext.ReadyCallbacks[i].invoke(); while (IgniteRenderingContext.ReadyCallbacks.length > 0) {
await IgniteRenderingContext.ReadyCallbacks.shift().invoke();
} }
IgniteRenderingContext.ReadyCallbacks = []; IgniteRenderingContext.ReadyCallbacks = [];
IgniteRenderingContext.ReadyTimer = null; IgniteRenderingContext.ReadyTimer = null;
IgniteRenderingContext.ReadyTimerRunning = false;
}, 1); }, 1);
} }
}
static get rendering() { static get rendering() {
if (IgniteRenderingContext.RenderCount && IgniteRenderingContext.RenderCount > 0) { if (IgniteRenderingContext.RenderCount && IgniteRenderingContext.RenderCount > 0) {
@ -550,6 +554,7 @@ class IgniteRenderingContext {
window.IgniteRenderingContext = IgniteRenderingContext; window.IgniteRenderingContext = IgniteRenderingContext;
window.IgniteObject = IgniteObject; window.IgniteObject = IgniteObject;
window.IgniteCallback = IgniteCallback;
export { export {
IgniteProperty, IgniteProperty,