feat: create function to handle fetching data from multiple sources

This helps since sometimes the data sources have issues occasionally
This commit is contained in:
2024-05-14 22:44:04 -04:00
parent 6c771eaaad
commit 1e1729ae30
2 changed files with 128 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
type OptionalArgs<T> =
| {
saveInCache: (result: NonNullable<T>) => Promise<void>;
fetchFromCache: () => Promise<T | null | undefined>;
}
| {
saveInCache?: undefined;
fetchFromCache?: undefined;
};
export async function fetchFromMultipleSources<T>(
fetchPromises: (() => Promise<T | null | undefined>)[],
args?: OptionalArgs<T>,
) {
let result = await args?.fetchFromCache?.();
if (result) {
return result;
}
if (fetchPromises.length === 0) {
throw new Error("fetchPromises cannot be empty");
}
for (const promise of fetchPromises) {
try {
result = await promise();
if (result) break;
} catch (e) {}
}
if (args?.saveInCache && result) {
await args.saveInCache(result);
}
return result ?? null;
}