@00f2ff/result
v1.0.0
Published
Safe promise handling with Results, implemented with ES2020 features
Downloads
10
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/result
API
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