@@ -693,6 +693,17 @@ function flush_queued_root_effects() {
693693 infinite_loop_guard ( ) ;
694694 }
695695
696+ var revert = active_fork ?. apply ( ) ;
697+
698+ /** @type {Effect[] } */
699+ var async_effects = [ ] ;
700+
701+ /** @type {Effect[] } */
702+ var render_effects = [ ] ;
703+
704+ /** @type {Effect[] } */
705+ var effects = [ ] ;
706+
696707 var root_effects = queued_root_effects ;
697708 var length = root_effects . length ;
698709
@@ -705,8 +716,21 @@ function flush_queued_root_effects() {
705716 root . f ^= CLEAN ;
706717 }
707718
708- process_effects ( root , active_fork ) ;
719+ process_effects ( root , async_effects , render_effects , effects ) ;
720+ }
721+
722+ if ( async_effects . length === 0 && ( active_fork === null || active_fork . pending === 0 ) ) {
723+ active_fork ?. commit ( ) ;
724+ flush_queued_effects ( render_effects ) ;
725+ flush_queued_effects ( effects ) ;
709726 }
727+
728+ revert ?. ( ) ;
729+
730+ for ( const effect of async_effects ) {
731+ update_effect ( effect ) ;
732+ }
733+
710734 old_values . clear ( ) ;
711735 }
712736 } finally {
@@ -810,22 +834,13 @@ export function schedule_effect(signal) {
810834 * effects to be flushed.
811835 *
812836 * @param {Effect } root
813- * @param {Fork | null } fork
837+ * @param {Effect[] } async_effects
838+ * @param {Effect[] } render_effects
839+ * @param {Effect[] } effects
814840 */
815- function process_effects ( root , fork ) {
816- var revert = fork ?. apply ( ) ;
817-
841+ function process_effects ( root , async_effects , render_effects , effects ) {
818842 var effect = root . first ;
819843
820- /** @type {Effect[] } */
821- var async_effects = [ ] ;
822-
823- /** @type {Effect[] } */
824- var render_effects = [ ] ;
825-
826- /** @type {Effect[] } */
827- var effects = [ ] ;
828-
829844 while ( effect !== null ) {
830845 var flags = effect . f ;
831846 var is_branch = ( flags & BRANCH_EFFECT ) !== 0 ;
@@ -874,18 +889,6 @@ function process_effects(root, fork) {
874889 parent = parent . parent ;
875890 }
876891 }
877-
878- if ( async_effects . length === 0 && ( fork === null || fork . pending === 0 ) ) {
879- fork ?. commit ( ) ;
880- flush_queued_effects ( render_effects ) ;
881- flush_queued_effects ( effects ) ;
882- }
883-
884- revert ?. ( ) ;
885-
886- for ( const effect of async_effects ) {
887- update_effect ( effect ) ;
888- }
889892}
890893
891894/**
0 commit comments