https://github.com/zbo14/oathbreaker
Cancel pending promises with ease!
https://github.com/zbo14/oathbreaker
abortcontroller abortsignal async promise promises
Last synced: 8 months ago
JSON representation
Cancel pending promises with ease!
- Host: GitHub
- URL: https://github.com/zbo14/oathbreaker
- Owner: zbo14
- License: mit
- Created: 2022-01-07T23:05:52.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-01-10T17:22:02.000Z (over 4 years ago)
- Last Synced: 2025-03-26T13:13:05.737Z (about 1 year ago)
- Topics: abortcontroller, abortsignal, async, promise, promises
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/oathbreaker
- Size: 94.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# oathbreaker
[](https://standardjs.com/)
Cancel pending promises with ease!
## Install
`npm i oathbreaker`
## Usage
### `Oath()`
Create an `Oath` and break it:
```js
const Oath = require('oathbreaker')
const oath = Oath((resolve, reject) => {
const t = setTimeout(() => resolve('ok'), 5e3)
return () => clearTimeout(t)
})
setTimeout(() => oath.break(), 3e3)
```
The executor function return value should be falsy or a function. If a function's returned, it's called if/when the oath is broken.
The executor function takes an optional 3rd argument. This is an [`AbortSignal`](https://nodejs.org/docs/latest-v16.x/api/globals.html#class-abortsignal), which can be passed to other methods (e.g. `https.request()`) or checked in business logic to see whether the oath was broken:
```js
const https = require('https')
const Oath = require('oathbreaker')
const oath1 = Oath((resolve, reject, signal) => {
https.get('', { signal }, res => {
// handle response
}).once('error', reject)
})
const oath2 = Oath((resolve, reject, signal) => {
// do some stuff
if (signal.aborted) return
// do some other stuff
})
```
### `Oath.all()`
Similar to `Promise.all()` except it breaks other oaths (i.e. cancels pending promises) when 1 rejects:
```js
Oath.all([oath1, oath2, ... ])
.then(() => {
// all promises resolved
})
.catch(() => {
// 1 promise rejected,
// others pending are canceled
})
```
### `Oath.any()`
Similar to `Promise.any()` except it breaks other oaths when 1 resolves:
```js
Oath.any([oath1, oath2, ... ])
.then(() => {
// 1 promise resolved,
// others pending are canceled
})
.catch(() => {
// All promises rejected
})
```
### `Oath.race()`
Similar to `Promise.race()` except it breaks other oaths when 1 resolves *or* rejects:
```js
Oath.race([oath1, oath2, ... ])
.then(() => {
// 1 promise resolved,
// others pending are canceled
})
.catch(() => {
// 1 promise rejected,
// others pending are canceled
})
```
## Test
`npm test`
## Lint
`npm run lint` or `npm run lint:fix`
## License
Licensed under [MIT](./LICENSE).