noex
Golang style error handling for Functions
, Promises
and Thenables
.
Install
Using npm:
$ npm install noex
Using yarn:
$ yarn add noex
Usage
// ESM
import { noex } from 'noex'
// CJS
const { noex } = require('noex')
Resolve a Promise:
// as a "tuple"
const [ file, fileError ] = await noex(fs.promises.readFile('someFile'))
// as a "named tuple"
const { value, error } = await noex(fs.promises.readFile('someFile'))
Call a Function:
// as a "tuple"
const [ json, jsonError ] = noex(() => JSON.parse('{"success": true}'))
// as a "named tuple"
const { value, error } = noex(() => JSON.parse('{"success": true}'))
Example
router.get('/api/resource/:id', async (req, res) => {
const [ resource, resourceErr ] = await noex(
resourceService.findById(req.params.id)
)
// database error
if (resourceErr) {
logger.error(resourceErr)
return res.sendStatus(500)
}
// resource not found
if (! resource) {
return res.sendStatus(404)
}
return res.json(resource)
})
API
Promise<any>
): Promise<Result<any, Error>>
noex(predicate: Run a function in a try-catch block and return the result.
const [ content, error ] = await noex(
fs.promises.readFile('path/to/file')
)
Function
): Result<any, Error>
noex(predicate: Run a promise or thenable in a try-catch block and return the result.
const [ json, error ] = noex(function () {
return JSON.parse('{ "identity": "Bourne" }')
})
Array<Promise<any>|Function>
): Promise<Array<Result<any, Error>>>
noex(predicate: Run a series of functions, promises and/or thenables and return their results.
const [ res1, res2 ] = await noex([
() => JSON.parse('{ "identity": "Bourne" }'),
fs.promises.readFile('path/to/file')
])
(...args: any[]) => Promise<any>
): (...args: any[]) => Promise<Result<any, Error>>
noex.wrap(fn: Wrap a function that returns a promise with noex.
const readFile = noex.wrap(function (file) {
return fs.promises.readFile(file)
})
const [ content, error ] = await readfile('path/to/file')
(...args: any[]) => any
): (...args: any[]) => Result<any, Error>
noex.wrap(fn: Wrap a function with noex.
const parseJson = noex.wrap(JSON.parse)
const [ json, error ] = parseJson('{ "identity": "Bourne" }')
Promise<Result<any, Error>>
noex.chain(predicates: Array<(...args: any[]) => any>): Run the given predicates in sequence, passing the result of each predicate to the next one in the list.
const [ val, err ] = await noex([
() => JSON.parse('{ "identity": "Bourne" }'),
json => json.identity.toUpperCase(),
])
console.log(val) //=> "BOURNE"
Array<any>
Result<any, Error>: The object to hold the resulting value or error of a function, promise or thenable.
Properties:
-
value (
any
) : The resulting value of a function, promise or thenable. -
val (
any
) : Same as value. -
error (
Error
) : The error caught by the try-catch block. -
err (
Error
) : Same as error.
License
This project is open-sourced software licensed under the MIT license.