export async function runBatchTableTruncate(targets: readonly T[], execute: (target: T) => Promise, refreshSucceeded: (targets: readonly T[]) => Promise): Promise { const succeeded: T[] = []; try { for (const target of targets) { if ((await execute(target)) !== false) succeeded.push(target); } } finally { // A later failure must not leave tabs for already truncated tables showing stale rows. if (succeeded.length > 0) await refreshSucceeded(succeeded); } }