Awesome Reviewers

When caching async data, ensure late/out-of-order responses can’t overwrite newer state.

Do this

Example (generation guard)

const readGen = new Map<string, number>();

function invalidate(keys: Iterable<string>) {
  for (const k of keys) readGen.set(k, (readGen.get(k) ?? 0) + 1);
}

async function readWithGuard<T>(key: string, fetcher: () => Promise<T>): Promise<T> {
  const gen = readGen.get(key) ?? 0;
  const value = await fetcher();
  if ((readGen.get(key) ?? 0) !== gen) {
    // stale response: drop
    throw new Error("stale");
  }
  return value;
}

Test requirement