feat(core/stdlib): enhance retry function with customizable options and add tests
This commit is contained in:
@@ -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>;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user