打造一个简单、函数式、易错误处理的异步函数库
- 高阶函数,或者有返回值的非高阶函数,返回结果均为
Promise<[Error | null, Awaited<ReturnType<typeof fn>>]>
- 无返回值函数,则返回
void
(视情况返回Promise<void>
) - 单一性原则,即一个函数只做一件事
- 减少泛型使用「泛型应使用在较为通用的集合中」
interface Either {
<A extends unknown[], R>(fn: (...args: A) => R): <X = R>(
...args: A
) => Promise<[Error | null, Awaited<X>]>;
}
对传入的异步函数进行自动错误捕获
产生错误 => Promise<[Error, null]>
正常运行 => Promise<[null, Awaited<ReturnType<typeof fn>>]>
默认返回签名 => Promise<[Error | null, Awaited<ReturnType<typeof fn>>]>
import { either } from "@passion_pi/fp";
const isErr = either(() => Promise.reject("err"));
const isOk = either(() => Promise.resolve({ data: "ok" }));
var [err, data] = await isErr();
// err => Error('err'); data => never
var [err, data] = await isOk();
// err => null; data => { data: "ok" }
export declare const defer: <T = unknown, E = unknown>() => {
resolve: (data?: T | PromiseLike<T> | undefined) => void;
reject: (msg?: E | undefined) => void;
pending: Promise<T>;
};