diff --git a/src/runtime/internal/scheduler.ts b/src/runtime/internal/scheduler.ts index 04c1264ab1..1ce255b217 100644 --- a/src/runtime/internal/scheduler.ts +++ b/src/runtime/internal/scheduler.ts @@ -31,8 +31,8 @@ export function add_flush_callback(fn) { flush_callbacks.push(fn); } +const seen_callbacks = new Set(); export function flush() { - const seen_callbacks = new Set(); do { // first, call beforeUpdate functions @@ -52,10 +52,10 @@ export function flush() { const callback = render_callbacks[i]; if (!seen_callbacks.has(callback)) { - callback(); - // ...so guard against infinite loops seen_callbacks.add(callback); + + callback(); } } @@ -67,6 +67,7 @@ export function flush() { } update_scheduled = false; + seen_callbacks.clear(); } function update($$) { diff --git a/test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte b/test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte index c1a538c62a..1772cb6513 100644 --- a/test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte +++ b/test/runtime/samples/lifecycle-onmount-infinite-loop/Child.svelte @@ -1 +1 @@ -Child \ No newline at end of file +Child diff --git a/test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte b/test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte index ba2da663d6..293e37d4f1 100644 --- a/test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte +++ b/test/runtime/samples/lifecycle-onmount-infinite-loop/main.svelte @@ -13,4 +13,4 @@ }); -
\ No newline at end of file +