feat(core/stdlib): enhance retry function with customizable options and add tests

This commit is contained in:
2025-07-28 14:35:51 +07:00
parent a633bd8da0
commit 01b13d6a65
5 changed files with 327 additions and 27 deletions
+8 -8
View File
@@ -1,8 +1,8 @@
import { isPromise } from '../../types';
export type TryItReturn<Return> = Return extends Promise<any>
? Promise<[Error, undefined] | [undefined, Awaited<Return>]>
: [Error, undefined] | [undefined, Return];
? Promise<{ error: Error; data: undefined } | { error: undefined; data: Awaited<Return> }>
: { error: Error; data: undefined } | { error: undefined; data: Return };
/**
* @name tryIt
@@ -14,10 +14,10 @@ export type TryItReturn<Return> = Return extends Promise<any>
*
* @example
* const wrappedFetch = tryIt(fetch);
* const [error, result] = await wrappedFetch('https://jsonplaceholder.typicode.com/todos/1');
* const { error, data } = await wrappedFetch('https://jsonplaceholder.typicode.com/todos/1');
*
* @example
* const [error, result] = await tryIt(fetch)('https://jsonplaceholder.typicode.com/todos/1');
* const { error, data } = await tryIt(fetch)('https://jsonplaceholder.typicode.com/todos/1');
*
* @since 0.0.3
*/
@@ -30,12 +30,12 @@ export function tryIt<Args extends any[], Return>(
if (isPromise(result))
return result
.then((value) => [undefined, value])
.catch((error) => [error, undefined]) as TryItReturn<Return>;
.then((value) => ({ error: undefined, data: value }))
.catch((error) => ({ error, data: undefined })) as TryItReturn<Return>;
return [undefined, result] as TryItReturn<Return>;
return { error: undefined, data: result } as TryItReturn<Return>;
} catch (error) {
return [error, undefined] as TryItReturn<Return>;
return { error, data: undefined } as TryItReturn<Return>;
}
};
}