A lightweight TypeScript utility that brings Go-style error handling to JavaScript/TypeScript Promises. Handle async errors elegantly with tuple returns similar to Go's pattern.
- Convert Promise-based functions to Go-like
[result, error]tuples - Object format for more readable code
- Type-safe error handling
- Zero dependencies
- TypeScript support out of the box
npm install promise-like-goimport { executeAsync } from 'promise-like-go';
// β
e.g. usage 1: array format
// get supabase post row
const [post, error] = await executeAsync(async () =>
supabase.from('posts').select('*').eq('id', 1)
);
// π₯ Do something with post or error
// β
e.g. usage 2: object format
// get supabase post row
const {data: post, error} = await executeAsyncObj(async () =>
supabase.from('posts').select('*').eq('id', 1)
);
// π₯ Do something with post or error// type: module
import { executeAsync, executeAsyncObj } from "promise-like-go";
// type: commonjs
// const { executeAsync, executeAsyncObj } = require("promise-like-go");
const fn = async () => {
// array format
const [data, error] = await executeAsync(() => {
return new Promise((resolve) => {
setTimeout(() => {
resolve("Array Format is Great π₯");
}, 1000);
});
});
console.log("β
array format response β‘οΈ ", data, error);
// object format
const { data: res2, error: err2 } = await executeAsyncObj(() => {
return new Promise((resolve) => {
setTimeout(() => {
resolve("Object Format is Awesome π₯");
}, 1000);
});
});
console.log("β
object format response β‘οΈ ", res2, err2);
};
fn().catch((err) => {
console.log("β error", err);
});executeAsync<T>(fn: () => Promise<T>): Promise<[T | null, any]>
executeAsyncObj<T>(fn: () => Promise<T>): Promise<{ data: T | null; error: any; }>Executes an async function and returns a tuple where:
- First element is the result (or null if error occurred)
- Second element is the error (or null if successful)
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.