mirror of
https://github.com/enricoros/big-AGI.git
synced 2026-05-10 21:50:14 -07:00
useAsyncCall: improvements
This commit is contained in:
@@ -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];
|
||||
}
|
||||
Reference in New Issue
Block a user