Skip to content

Instantly share code, notes, and snippets.

@metruzanca
Created July 24, 2023 11:44
Show Gist options
  • Save metruzanca/0f678e0e9de37545cd8d0775cc63b5fa to your computer and use it in GitHub Desktop.
Save metruzanca/0f678e0e9de37545cd8d0775cc63b5fa to your computer and use it in GitHub Desktop.
Rust & Golang inspired error handing in Node
export type Success<Data> = readonly [Data, undefined];
export type Failure<Err = Error> = readonly [undefined, Err];
/** A cross between Rust and Golang exception handling. I greatly dislike exceptions */
export type Result<Data, Err = Error> = Promise<(Success<Data> | Failure<Err>)>
export const Ok = <T>(data: T): Success<T> => [data, undefined]
export const Err = <E = Error>(error: E): Failure<E> => [undefined, error]
@metruzanca
Copy link
Author

e.g.

async function list(): Result<Wfm.Item[]> {
  return axiosInstance.get<{ payload: { items: Wfm.Item[] } }>('/items')
    .then(response => Ok(response.data.payload.items))
    .catch(err => Err(err))
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment