Function: safe()
Call Signature
safe<
F,P,R>(fn): (...params) =>Task<R,unknown>
Given a function which returns a Promise, return a new function with the same parameters but which returns a Task instead.
If you wish to transform the error directly, rather than with a combinator, see the other overload, which accepts an error handler.
Examples
You can use this to create a safe version of the fetch function, which will produce a Task instead of a Promise and which does not throw an error for rejections, but instead produces a Rejected variant of the Task.
import { safe } from 'true-myth/task';
const fetch = safe(window.fetch);
const toJson = safe((response: Response) => response.json() as unknown);
let json = fetch('https://www.example.com/api/users').andThen(toJson);Type Parameters
F
F extends (...params) => PromiseLike<unknown>
P
P extends never[]
R
R extends any
Parameters
fn
F
A function to wrap so it never throws an error or produces a Promise rejection.
Returns
(...
params):Task<R,unknown>
Parameters
params
...P
Returns
Task<R, unknown>
Call Signature
safe<
F,P,R,E>(fn,onError): (...params) =>Task<R,E>
Given a function which returns a Promise and a function to transform thrown errors or Promise rejections resulting from calling that function, return a new function with the same parameters but which returns a Task.
To catch all errors but leave them unhandled and unknown, see the other overload.
Examples
You can use this to create a safe version of the fetch function, which will produce a Task instead of a Promise and which does not throw an error for rejections, but instead produces a Rejected variant of the Task.
import { safe } from 'true-myth/task';
class CustomError extends Error {
constructor(name: string, cause: unknown) {
super(`my-lib.error.${name}`, { cause });
this.name = name;
}
}
function handleErr(name: string): (cause: unknown) => CustomError {
return (cause) => new CustomError(name);
}
const fetch = safe(window.fetch, handleErr('fetch'));
const toJson = safe(
(response: Response) => response.toJson(),
handleErr('json-parsing')
);
let json = fetch('https://www.example.com/api/users').andThen(toJson);Type Parameters
F
F extends (...params) => PromiseLike<unknown>
P
P extends never[]
R
R extends any
E
E
Parameters
fn
F
A function to wrap so it never throws an error or produces a Promise rejection.
onError
(reason) => E
A function to use to transform the
Returns
(...
params):Task<R,E>
Parameters
params
...P
Returns
Task<R, E>