Skip to content
An experiment in replacing try/catch boilerplate with an [err, result] array
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
LICENSE
README.md
index.js
package.json

README.md

bimodal

bimodal is an experiment in replacing try/catch boilerplate with an [err, result] array, inspired by error return values in Go.

Installation

# npm
npm i --save bimodal

# yarn
yarn add bimodal

Usage

const bimodal = require('bimodal')

const [err, result] = await bimodal (fnThatMayThrowError, arg1, arg2, ...)

Rationale

This is annoying:

let result

try {
  result = await fnThatMayThrowError()
}
catch (err) {
  // ...
}

// use result

This is nicer:

let [err, result] = await bimodal (fnThatMayThrowError)

if (err) {
  // ...
}

// use result

What's it doing?

Not much:

module.exports = async (fn, ...args) => {
  const channels = [undefined, undefined]

  try {
    channels[1] = await fn.apply(null, args)
  }
  catch (err) {
    channels[0] = err
  }
  finally {
    return channels
  }
}
You can’t perform that action at this time.