Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/knicola/noex
Golang style error handling for Functions, Promises and Thenables.
https://github.com/knicola/noex
error-handling nodejs then-catch try-catch
Last synced: 6 days ago
JSON representation
Golang style error handling for Functions, Promises and Thenables.
- Host: GitHub
- URL: https://github.com/knicola/noex
- Owner: knicola
- License: mit
- Created: 2021-10-16T05:46:12.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-07-19T04:57:32.000Z (over 1 year ago)
- Last Synced: 2024-12-17T18:42:54.582Z (about 1 month ago)
- Topics: error-handling, nodejs, then-catch, try-catch
- Language: JavaScript
- Homepage:
- Size: 902 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# noex
Golang style error handling for `Functions`, `Promises` and `Thenables`.
## Install
Using npm:
```sh
$ npm install noex
```Using yarn:
```sh
$ yarn add noex
```## Usage
```js
// ESM
import { noex } from 'noex'
```
```js
// CJS
const { noex } = require('noex')
```Resolve a Promise:
```js
// 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:
```js
// as a "tuple"
const [ json, jsonError ] = noex(() => JSON.parse('{"success": true}'))
// as a "named tuple"
const { value, error } = noex(() => JSON.parse('{"success": true}'))
```**Example**
```js
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
#### noex(predicate: `Promise`):Promise<[Result](#result-arrayany-error)>
Run a function in a try-catch block and return the result.
```js
const [ content, error ] = await noex(
fs.promises.readFile('path/to/file')
)
```#### noex(predicate: `Function`):
[Result](#result-arrayany-error)
Run a promise or thenable in a try-catch block and return the result.
```js
const [ json, error ] = noex(function () {
return JSON.parse('{ "identity": "Bourne" }')
})
```#### noex(predicate: `Array|Function>`):
Promise](#result-arrayany-error)>>
Run a series of functions, promises and/or thenables and return their results.```js
const [ res1, res2 ] = await noex([
() => JSON.parse('{ "identity": "Bourne" }'),
fs.promises.readFile('path/to/file')
])
```#### noex.wrap(fn: `(...args: any[]) => Promise`):
(...args: any[]) => Promise<[Result](#result-arrayany-error)>
Wrap a function that returns a promise with noex.
```js
const readFile = noex.wrap(function (file) {
return fs.promises.readFile(file)
})const [ content, error ] = await readfile('path/to/file')
```
#### noex.wrap(fn: `(...args: any[]) => any`):(...args: any[]) => [Result](#result-arrayany-error)
Wrap a function with noex.
```js
const parseJson = noex.wrap(JSON.parse)const [ json, error ] = parseJson('{ "identity": "Bourne" }')
```#### noex.chain(predicates: Array<(...args: any[]) => any>):
Promise<[Result](#result-arrayany-error)>
Run the given predicates in sequence, passing the result of each predicate to the next one in the list.
```js
const [ val, err ] = await noex([
() => JSON.parse('{ "identity": "Bourne" }'),
json => json.identity.toUpperCase(),
])
console.log(val) //=> "BOURNE"
```#### Result: `Array`
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](./LICENSE).