Restore truedm commit: chore: avoid microtasks when flushing sync

# Conflicts:
#	packages/svelte/src/internal/client/runtime.js
pull/16077/head
Dominic Gannaway 5 months ago committed by raythurnvoid
parent c9346ab391
commit 28cef32e69

@ -47,6 +47,7 @@ const handled_errors = new WeakSet();
let is_throwing_error = false; let is_throwing_error = false;
let is_flushing = false; let is_flushing = false;
let is_flushing_sync = false;
/** @type {Effect | null} */ /** @type {Effect | null} */
let last_scheduled_effect = null; let last_scheduled_effect = null;
@ -734,7 +735,9 @@ function flush_queued_effects(effects) {
export function schedule_effect(signal) { export function schedule_effect(signal) {
if (!is_flushing) { if (!is_flushing) {
is_flushing = true; is_flushing = true;
queueMicrotask(flush_queued_root_effects); if (!is_flushing_sync) {
queueMicrotask(flush_queued_root_effects);
}
} }
var effect = (last_scheduled_effect = signal); var effect = (last_scheduled_effect = signal);
@ -818,23 +821,30 @@ function process_effects(root) {
* @returns {T} * @returns {T}
*/ */
export function flushSync(fn) { export function flushSync(fn) {
var result; var previously_flushing_sync = is_flushing_sync;
if (fn) {
is_flushing = true;
flush_queued_root_effects();
result = fn();
}
while (true) { try {
flush_tasks(); var result;
is_flushing_sync = true;
if (queued_root_effects.length === 0) { if (fn) {
return /** @type {T} */ (result); is_flushing = true;
flush_queued_root_effects();
result = fn();
} }
is_flushing = true; while (true) {
flush_queued_root_effects(); flush_tasks();
if (queued_root_effects.length === 0) {
return /** @type {T} */ (result);
}
is_flushing = true;
flush_queued_root_effects();
}
} finally {
is_flushing_sync = previously_flushing_sync;
} }
} }

Loading…
Cancel
Save