react-hooks-async
Version:
React custom hooks for async functions with abortability and composability
28 lines (24 loc) • 737 B
JavaScript
import { useCallback } from 'react';
import { useAsyncTask } from './use-async-task';
const createAbortError = (message) => {
try {
return new DOMException(message, 'AbortError');
} catch (e) {
const err = new Error(message);
err.name = 'AbortError';
return err;
}
};
export const useAsyncTaskTimeout = (func, delay) => useAsyncTask(useCallback(
(abortController, delayOverride) => new Promise((resolve, reject) => {
const delayToUse = delayOverride || delay;
const id = setTimeout(() => {
resolve(func());
}, delayToUse);
abortController.signal.addEventListener('abort', () => {
clearTimeout(id);
reject(createAbortError('timer aborted'));
});
}),
[func, delay],
));