2.0.1 • Published 2 years ago
settle-it v2.0.1
settle-it
Deal with code that can throw.
Install
npm install settle-itWhy
Most commonly I use try/catch, but in some cases it's great:
- if you prefer a one-liner
- when you want to ignore the error
- to avoid nesting
try/catchstatements - when you prefer const,
try/catchstatements get in the way because you need to useletif you need the variable outside of thetry/catchscope:let todos; try { todos = JSON.parse(localStorage.getItem('todos')) } catch {} return todos.filter(todo => todo.done)
Also:
erris always anErrorobject — great for TypeScript & unexpected cases when someonethrow 'error'- Supports a
fallbackvalue. fallbackcan be a function that accepts theError— great for working with it
Examples
Safely parse JSON & specify the type (one-liner):
import settle from 'settle-it'
const [parsed] = settle<State>(() => JSON.parse(value))
// parsed is State | undefinedPrefer const:
const isOnline = settle(async () => {
const response = await fetch('https://status.com/check')
const json = response.json()
return json.isOnline
}, false)Safely fetch & on error, send to error tracking service (one-liner):
import settle from 'settle-it'
const [response] = await settle(fetch('https://todos.com/get'), sendToErrorTrackingService)
// response is Response | undefinedSafely read a file & fallback to empty string (one-liner):
import { readFile } from 'node:fs/promises'
const [content] = await settle(readFile(path), '')
// content is stringAvoid nesting try/catch statements:
const user = settle(() => JSON.parse(json), () => showDialog('failed to parse'))
const contents = settle(fetch(`http://example.com/${user.id}`), () => showDialog('failed to fetch'))
// to show different errors to the user you need to nest try/catch statementsAPI
I usually prefer source code or examples ↑.
settle<T, F>(
value: Promise | (() => T) | (() => Promise<T>),
fallback: F | ((err: Error) => F | void)
): [T, undefined] | [F, Error]- First parameter accepts either sync/async function or a Promise.
- Returns
[value, undefined]if no error was thrown while executing the function. - Returns
[fallback, Error]is an error was thrown.