async function fetchAll<T>(urls: string[]): Promise<{ url: string; data?: T; error?: unknown }[]> {
const results = await Promise.allSettled(
urls.map(async (url) => {
const r = await fetch(url);
if (!r.ok) throw new Error(`HTTP ${r.status}`);
return r.json() as Promise<T>;
})
);
return results.map((r, i) =>
r.status === 'fulfilled'
? { url: urls[i]!, data: r.value }
: { url: urls[i]!, error: r.reason }
);
}
const out = await fetchAll<{ id: number }>(['/a.json', '/b.json', '/c.json']);
const succeeded = out.filter((r): r is typeof r & { data: { id: number } } => 'data' in r);
Create a free account and build your private vault. Share publicly whenever you want.