Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shfshanyue/promise-utils
Useful utils about promise. (map, filter, retry, sleep
https://github.com/shfshanyue/promise-utils
async-await delay nodejs parallel promise promise-library promise-map
Last synced: about 2 months ago
JSON representation
Useful utils about promise. (map, filter, retry, sleep
- Host: GitHub
- URL: https://github.com/shfshanyue/promise-utils
- Owner: shfshanyue
- Created: 2020-04-11T03:41:19.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T09:17:44.000Z (about 2 years ago)
- Last Synced: 2024-04-15T04:27:42.700Z (9 months ago)
- Topics: async-await, delay, nodejs, parallel, promise, promise-library, promise-map
- Language: TypeScript
- Homepage:
- Size: 943 KB
- Stars: 8
- Watchers: 3
- Forks: 4
- Open Issues: 16
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# promise-utils
A few tools about promise, like delay, map, filter and retry.
[![npm version](https://img.shields.io/npm/v/@shanyue/promise-utils.svg?style=flat-square)](https://www.npmjs.org/package/@shanyue/promise-utils)
![build status](https://img.shields.io/github/workflow/status/shfshanyue/promise-utils/test?style=flat-square)
[![install size](https://packagephobia.now.sh/badge?p=@shanyue/promise-utils)](https://packagephobia.now.sh/result?p=@shanyue/promise-utils)
[![npm downloads](https://img.shields.io/npm/dw/@shanyue/promise-utils.svg?style=flat-square)](http://npm-stat.com/charts.html?package=@shanyue/promise-utils)## Install
``` bash
$ npm install @shanyue/promise-utils
```> Require node > 10.x
## Usage
``` ts
import { map, filter, retry, sleep } from '@shanyue/promise-utils'// Output: [2, 3, 4, 5]
await map([Promise.resolve(1), 2, 3, 4], (x: number) => x + 1)// Output: [1, 3]
await filter([Promise.resolve(1), 2, 3, 4], (x: number) => Boolean(x % 2))await sleep(300)
await retry(() => Promise.resolve(3), { times: 3 })
```## API
### map(input, mapper, [options])
> Map promises concurrently
+ `input`: Promise or any value
+ `mapper`: Expected to return a Promise or value.
+ `options.concurrency`: Number of concurrently pending promises.``` ts
import { map } from '@shanyue/promise-utils'// Output: [2, 3, 4, 5]
await map([Promise.resolve(1), 2, 3, 4], (x: number) => x + 1)// Output: [2, 3, 4, 5]
await map([Promise.resolve(1), 2, 3, 4], (x: number) => Promise.resolve(x + 1))// After 4 * 300ms,Output: [2, 3, 4, 5]
await map([1, 2, 3, 4], async x => {
await sleep(300)
return x + 1
}, { concurrency: 1 })
```### filter(input, filterer, [options])
> Filter promises concurrently
+ `input`: Promise or any value.
+ `filterer`: Expected to return boolean-like value.
+ `options.concurrency`: Number of concurrently pending promises.``` ts
import { filter } from '@shanyue/promise-utils'// Output: [1, 3]
await filter([Promise.resolve(1), 2, 3, 4], (x: any) => Boolean(x % 2))// Output: [1, 3]
await filter([Promise.resolve(1), 2, 3, 4], (x: any) => Promise.resolve(Boolean(x % 2)))
```### retry(input, [options])
> Retry promise
+ `input`: Promise or any value.
+ `options.times`: Number of concurrently pending promises.
+ `options.attemptNumber`: Number of concurrently pending promises.``` ts
import { retry, AbortError } from '@shanyue/promise-utils'// Output: 'ok'
await retry(async attemptNumber => {
return attemptNumber === 3 ? 'ok' : Promise.reject(new Error('error'))
}, {
times: 3
})// Output: 'ok'
await retry(async attemptNumber => {
return attemptNumber === 3 ? 'ok' : Promise.reject(new Error('error'))
}, {
times: 3,
onFailedAttempt: async (e) => {
console.log(e)
// retry delay 1s
await sleep(1000)
}
})// AbortError fail-fast
try {
await retry(async () => {
const err = new AbortError('hello')
return Promise.reject(err)
}, {
times: 3
})
} catch (e) {
}
```### sleep(ms)
``` js
import { retry } from '@shanyue/promise-utils'// delay 1s
await sleep(1000)
```