Files
aniplay-api/src/libs/fetchFromMultipleSources.ts
Rushil Perera 1e1729ae30 feat: create function to handle fetching data from multiple sources
This helps since sometimes the data sources have issues occasionally
2024-05-14 22:44:04 -04:00

37 lines
793 B
TypeScript

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;
}