run function

void run(
  1. EffectNode e
)

Executes an effect node if it needs updating.

Checks if the effect is dirty or has pending updates, and if so, runs its function with dependency tracking. Otherwise, just marks it as watching.

This is called internally when flushing queued effects.

Implementation

void run(EffectNode e) {
  final flags = e.flags;
  if ((flags & ReactiveFlags.dirty) != ReactiveFlags.none ||
      ((flags & ReactiveFlags.pending) != ReactiveFlags.none &&
          checkDirty(e.deps!, e))) {
    ++cycle;
    e.depsTail = null;
    e.flags = 6 /*ReactiveFlags.watching | ReactiveFlags.recursedCheck*/
        as ReactiveFlags;
    final prevSub = setActiveSub(e);
    try {
      e.fn();
    } finally {
      activeSub = prevSub;
      e.flags &= -5 /*~ReactiveFlags.recursedCheck*/;
      purgeDeps(e);
    }
  } else {
    e.flags = ReactiveFlags.watching;
  }
}