dx
JavaScript without try...catch
.Motivation
JavaScript expects you to handle errors withtry...catch
, but the syntax is somewhat inconvenient:- You have to declare result variables separately from your function calls.
const userInput = 'fail'
let json
try {
json = JSON.parse(userInput)
} catch (err) {
console.error(err.stack)
}
// Do something with `json`...
Since we declare
json
separately, we can't declare json
as a const
binding.try...catch
promotes catch-all error handling.
try...catch
promotes catch-all error handling.try {
// A bunch of stuff happens...
// ...
// ...
} catch (err) {
console.log('welp')
console.error(err.stack)
}
You might want to handle errors in a more fine-grained way. But then you run into the verbosity of problem 1.
Enter dx
dx
is a micro utility (it's just a few lines) that addresses the two pain points above.import { dx } from '@nucleartide/dx'
const [res, err] = dx(JSON.parse)('invalid json')
if (err) {
console.error(err.stack)
}
It allows you to place your declaration and function call on the same line. And it promotes a granular, per-function error handling style.
It also works with async functions:
import { dx } from '@nucleartide/dx'
function asyncHello(name) {
return Promise.reject(`hello ${name}`)
}
;(async () => {
const [res, err] = await dx(asyncHello)('jesse')
if (err) {
console.error(err.stack)
}
})
Convinced?
npm install @nucleartide/dx
License
MITJason Tu · GitHub @nucleartide · Twitter @nucleartide