runEffect function

void runEffect(
  1. EffectBase e
)

Run an effect with the given flags

Implementation

@pragma('vm:prefer-inline')
@pragma('wasm:prefer-inline')
@pragma('dart2js:prefer-inline')
void runEffect(EffectBase e) {
  final flags = e.flags;
  if (flags & (ReactiveFlags.dirty) != 0 ||
      (flags & (ReactiveFlags.pending) != 0 && checkDirty(e.deps!, e))) {
    ++cycle;
    e.depsTail = null;
    e.flags = (ReactiveFlags.watching | ReactiveFlags.recursedCheck);

    // only effect and watcher;
    final prevSub = setActiveSub(e);
    try {
      e.effectFn();
    } finally {
      activeSub = prevSub;
      e.flags &= ~(ReactiveFlags.recursedCheck);
      purgeDeps(e);
    }
  } else {
    e.flags = (ReactiveFlags.watching);
  }
}