Javascript error handling can sometimes be confusing especially in using fetch, if you are using await
you will need to wrap it in a try
catch
block to handle the error and we all know that it's a headache
Well what if i tell you we can do something like this
import { get } from "./eavfetch";
interface Book {
id: string;
title: string;
author: string;
}
async function fetchBooks() {
// data type is inferred as Book[]
const [data, error] = await get<Book[]>("/books");
if (error) {
console.error("Failed to fetch books:", error);
return;
}
if (data) {
console.log("Fetched books:", data);
}
}
Now all of the sudden handling fetch
seems easy and very straightforward and safe way to handle error and data right? Well that's the power of error as values approach
you can copy the eavfetch.ts/js
in the repo and start using it right away.
There’s nothing bad with try/catch actually — it’s very explicit as opposed to the Go way. Also the native language constructs are always better than hidden abstractions, fwiw. But it all is personal of course.
If you like this specific approach you probably should check out Effect — they do something extremely clever around error handling.