From e5d9eba2b245cbf5ad3ec1f2e2fbc73c8d69c6a7 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 28 May 2024 17:24:29 +0100 Subject: [PATCH] tweak --- packages/svelte/src/internal/client/runtime.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 791ea87e23..69149ffe7d 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -601,16 +601,20 @@ async function yield_tick() { * @returns {void} */ export function schedule_effect(signal) { + var is_flush_yield = current_scheduler_mode === FLUSH_YIELD; // If we have an action effect then we need to dispatch a standard microtask update, // that's because actions might need to update the UI or attach/remove event listeners // and deferring this can lead to hard-to-find bugs. If there are any deferred updates // already, they'll be handled by the microtask instead. - if (current_scheduler_mode === FLUSH_MICROTASK || (signal.f & ACTION_EFFECT) !== 0) { + if ( + current_scheduler_mode === FLUSH_MICROTASK || + (is_flush_yield && (signal.f & ACTION_EFFECT) !== 0) + ) { if (!is_micro_task_queued) { is_micro_task_queued = true; queueMicrotask(process_deferred); } - } else if (current_scheduler_mode === FLUSH_YIELD) { + } else if (is_flush_yield) { if (!is_yield_task_queued) { is_yield_task_queued = true; yield_tick().then(process_deferred);