useAsyncCall: improvements

This commit is contained in:
Enrico Ros
2024-08-03 23:27:33 -07:00
parent 4a40cca39e
commit f0240018d6
+19 -22
View File
@@ -45,30 +45,27 @@ export function useAsyncCall<TArgs extends any[], TResult>(asyncFunction: AsyncF
};
}, [asyncFunction]);
const execute = React.useCallback(
async (...args: TArgs): Promise<TResult> => {
setState(prev => ({ ...prev, isLoading: true, error: null }));
const execute = React.useCallback(async (...args: TArgs): Promise<TResult> => {
setState(prev => ({ ...prev, isLoading: true, error: null }));
try {
const result = await latestAsyncFunction.current(...args);
if (isMounted.current) {
setState({ isLoading: false, error: null, data: result });
}
return result;
} catch (err) {
const error = err instanceof Error ? err : new Error('An error occurred');
if (isMounted.current) {
setState(prev => ({
...prev,
isLoading: false,
error,
}));
}
throw error;
try {
const result = await latestAsyncFunction.current(...args);
if (isMounted.current) {
setState({ isLoading: false, error: null, data: result });
}
},
[],
);
return result;
} catch (err) {
const error = err instanceof Error ? err : new Error('An error occurred');
if (isMounted.current) {
setState(prev => ({
...prev,
isLoading: false,
error,
}));
}
throw error;
}
}, []);
return [state.isLoading, execute, state.error, state.data];
}