fix: fetchFromMultipleSources returns errorOccurred only if all sources fail

This commit is contained in:
2024-06-07 23:42:41 -04:00
parent c35c9b9e09
commit 1ccd004c77
5 changed files with 21 additions and 25 deletions

View File

@@ -10,7 +10,7 @@ type OptionalArgs<T> =
interface FetchFromMultipleSourcesResult<T> {
result: T | null;
errors: (Error | string | undefined)[] | null;
errorOccurred: boolean;
}
export async function fetchFromMultipleSources<T>(
@@ -19,21 +19,21 @@ export async function fetchFromMultipleSources<T>(
): Promise<FetchFromMultipleSourcesResult<T>> {
let result = await args?.fetchFromCache?.();
if (result) {
return { result, errors: null };
return { result, errorOccurred: false };
}
if (fetchPromises.length === 0) {
throw new Error("fetchPromises cannot be empty");
}
let errors: Record<number, Error> = {};
let errorCount = 0;
for (let i = 0; i < fetchPromises.length; i++) {
const promise = fetchPromises[i];
try {
result = await promise();
if (result) break;
} catch (e) {
errors[i] = e as Error;
errorCount++;
}
}
@@ -44,7 +44,6 @@ export async function fetchFromMultipleSources<T>(
result = result ?? null;
return {
result,
errors:
!result && Object.keys(errors).length > 0 ? Object.values(errors) : null,
errorOccurred: errorCount === fetchPromises.length,
};
}