1.1.1 • Published 5 years ago

typed-try-catch v1.1.1

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

typed-try-catch

Try-catch alternative providing a syntactically slim way to catch errors by type.

Why?

Catching generals exception (i.e. errors without regarding their type) is potentially a bad idea (quote from this StackOverflow answer):

Swallowing exceptions is a dangerous practice because:

  • It can cause the user to think something succeeded when it actually failed.
  • It can put your application into states that you didn't plan for.
  • It complicates debugging, since it's much harder to find out where the failure happened when you're dealing with bizarre/broken behavior instead of a stack trace.

As you can probably imagine, some of these outcomes can be extremely catastrophic, so doing this right is an important habbit.

The V8 try-catch optimization problem (for V8 < 5.3) is nice side effect of using this package.

Installation

npm install --save typed-try-catch
yarn add typed-try-catch

Usage

import attempt, {define} from 'typed-try-catch'

const [NetworkError, ReadError, AuthError] = define('NetworkError', 'ReadError', 'AuthError')

attempt(() => {
    connectAndReadFromDb()
})
.catch(NetworkError, error => {
    console.warn('could not connect')
})
.catch(ReadError, AuthError, error => {
    console.warn('could not read from db')
})
.finally(() => {
    ensureDbClosed()
})

Back in the old days we would have written this like so:

try {
    connectAndReadFromDb()
}
catch (error) {
    switch (error.constructor) {
        case NetworkError:
            console.warn('could not connect')
            break
        case ReadError:
        case AuthError:
            console.warn('could not read from db')
            break
        default:
            throw error
    }
}
finally {
    ensureDbClosed()
}

Async usage is also supported. For more detail see the tests.

Related