fix: fetchFromMultipleSources returns errorOccurred only if all sources fail
This commit is contained in:
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user