@00f2ff/result
v1.0.0
Published
Safe promise handling with Results, implemented with ES2020 features
Readme
Result
Safely handle asynchronous errors with Result. Inspired by neverthrow's core ResultAsync types, but is intended for use in sequential imperative statements using async/await, rather than functional pipelining.
Akin to Rust's std::result and Scala's scala.util.Either. Uses ES2020's Promise.allSettled under the hood and mostly follows its naming convention.
Installation
npm i @00f2ff/resultAPI
E defaults to Error.
settle<T, E>
Settles a promise into Result<T, E> that can be narrowed to Fulfilled<T, E> or Rejected<T, E>.
const result: Result<boolean, Error> = await settle(Promise.resolve(true));
if (result.isFulfilled()) {
console.log(result.value); // true
}const result: Result<boolean, Error> = await settle(Promise.reject(new Error("oh no"));
if (result.isRejected()) {
console.log(result.error); // Error("oh no")
}settleAll<T, E>
Settles an array of promises into a tuple of [Fulfilled<T, E>[], Rejected<T, E>[]].
const resolvingPromises = [Promise.resolve(true), Promise.resolve("hello")];
const rejectingPromises = [Promise.reject(new Error("oh no"), Promise.reject(new DbError("ruh roh"))];
const [fulfilled, rejected] = await settleAll<boolean | string, Error | DbError>([...resolvingPromises, ...rejectingPromises]);Test
npm run test