Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 15x 15x 2x 15x 13x 13x 13x 15x 1x 1x 1x 1x 1x 1x 1x 7x 7x 7x 7x 7x 7x 6x 6x 6x 7x | /**
* Represents the return type of the `betterr` and `betterrSync` functions:
* a tuple with `data` (callback return value) and `err` (error during
* execution), one of which will be null depending on the success of the
* callback
*/
export type BetterrResult<TData, TError> = [TData, null] | [null, TError];
/**
* Asynchronously executes the callback and returns a tuple with `data`
* (callback return value) and `err` (error during execution), one of which
* will be null depending on the success of the callback
*/
export const betterr = async <TData, TError extends Error = Error>(
callback: () => TData | Promise<TData>,
): Promise<BetterrResult<TData, TError>> => {
try {
const data = await callback();
return [data, null];
} catch (error) {
const err = error instanceof Error ? error : new Error(`${error}`);
return [null, err as TError];
}
};
/**
* Synchronously executes the callback and returns a tuple with `data`
* (callback return value) and `err` (error during execution), one of
* will be null depending on the success of the callback
*/
export const betterrSync = <TData, TError extends Error = Error>(
callback: () => TData,
): BetterrResult<TData, TError> => {
try {
const data = callback();
return [data, null];
} catch (error) {
const err = error instanceof Error ? error : new Error(`${error}`);
return [null, err as TError];
}
};
|