Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sindresorhus/p-reduce
Reduce a list of values using promises into a promise for a value
https://github.com/sindresorhus/p-reduce
Last synced: about 1 month ago
JSON representation
Reduce a list of values using promises into a promise for a value
- Host: GitHub
- URL: https://github.com/sindresorhus/p-reduce
- Owner: sindresorhus
- License: mit
- Created: 2016-10-21T04:17:21.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2023-02-11T08:31:44.000Z (over 1 year ago)
- Last Synced: 2024-04-13T17:43:02.611Z (7 months ago)
- Language: JavaScript
- Size: 12.7 KB
- Stars: 66
- Watchers: 6
- Forks: 7
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- Funding: .github/funding.yml
- License: license
- Security: .github/security.md
Awesome Lists containing this project
- promise-fun - p-reduce
README
# p-reduce
> Reduce a list of values using promises into a promise for a value
Useful when you need to calculate some accumulated value based on async resources.
**Please don't use it to [write unreadable code](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-array-reduce.md).**
## Install
```sh
npm install p-reduce
```## Usage
```js
import pReduce from 'p-reduce';
import humanInfo from 'human-info'; // Not a real packageconst names = [
getUser('sindresorhus').then(info => info.name),
'Addy Osmani',
'Pascal Hartig',
'Stephen Sawchuk'
];const totalAge = await pReduce(names, async (total, name) => {
const info = await humanInfo(name);
return total + info.age;
}, 0);console.log(totalAge);
//=> 125
```## API
### pReduce(input, reducer, initialValue?)
Returns a `Promise` that is fulfilled when all promises in `input` and ones returned from `reducer` are fulfilled, or rejects if any of the promises reject. The fulfilled value is the result of the reduction.
#### input
Type: `Iterable`
Iterated over serially in the `reducer` function.
#### reducer(previousValue, currentValue, index)
Type: `Function`
Expected to return a value. If a `Promise` is returned, it's awaited before continuing with the next iteration.
#### initialValue
Type: `unknown`
Value to use as `previousValue` in the first `reducer` invocation.
## Related
- [p-each-series](https://github.com/sindresorhus/p-each-series) - Iterate over promises serially
- [p-map-series](https://github.com/sindresorhus/p-map-series) - Map over promises serially
- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently
- [More…](https://github.com/sindresorhus/promise-fun)---
Get professional support for this package with a Tidelift subscription
Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies.