promise-placeholder
Version:
Creates a placeholder object which can be used to keep functions which can be called in parallel and post execution, the values will be assigned at proper places!
198 lines (158 loc) ⢠7.68 kB
Markdown
<h1 align="center">Welcome to promise-placeholder š</h1>
<p>
<img alt="Version" src="https://img.shields.io/badge/version-1.2.1-blue.svg?cacheSeconds=2592000" />
<a href="https://github.com/prkeshri/node-promise-placeholder#readme" target="_blank">
<img alt="Documentation" src="https://img.shields.io/badge/documentation-yes-brightgreen.svg" />
</a>
<a href="https://github.com/prkeshri/node-promise-placeholder/graphs/commit-activity" target="_blank">
<img alt="Maintenance" src="https://img.shields.io/badge/Maintained%3F-yes-green.svg" />
</a>
<a href="#" target="_blank">
<img alt="License: ISC" src="https://img.shields.io/github/license/prkeshri/promise-placeholder" />
</a>
</p>
> Creates a placeholder object which can be used to keep functions which can be called in parallel and post execution, the values will be assigned at proper places!
```sh
npm install
```
<a name="PromisePlaceholder"></a>
Creates a placeholder object which can be used to keep functions which can be called in parallel and post execution, the values will be assigned at proper places!
**Kind**: global constant
**Notes**: 1. All the methods of async library are mapped with exec followed by first letter uppercase method name. <br/>
For example: <br/>
```async.parallelLimit``` will be used when ```pp.execParallelLimit(2)``` will be called // This will make 2 concurrent calls at a time <br/>
... etc
2. exec is short for execParallel which uses async.parallel <br/>
**Example**
```js
// Consider the following scenario where we need complete data on teams.
// We need the data at the respective points by calling the api. (get...FromApi are async functions that make http call to some server which outputs the desired array!)
const PromisePlaceholder = require('promise-placeholder');
const pp = new PromisePlaceholder;
const obj = {
data1: pp({
teams: async () => getTeamsFromApi(),
playersInfo: pp({
active: async () => getActivePlayersFromApi(),
retired: async () => getRetiredPlayersFromApi(),
joinedIn2007: async () => getPlayersFromApi(2007),
joinedLater: pp({
2008: async () => getJoinedLaterThanFromApi(2007)
})
})
})
}
// Note: pp() -> This call collects all the keys with value as a function in the object. It DOES NOT iterate deep, that's the reason pp() is should be called on every object which has a function value in any key which should be included in a parallel call.
// In case of deep-iteration is deserved, see [collect](#PromisePlaceholder+collect)
// Now, we need all the async calls to execute and the value to be set at the respective places.
await pp.exec(); // By default executes async.parallel(); ,, other async.method can be used as an uppercase version (Example below)
// By default, the above outputs the result of async[method] call but this will ideally not be required and can be ignored!
// Troper values will be placed in obj itself.
console.log(obj); // will log:
{
data1: {
teams: ['team1','team2'],
playersInfo: {
active: ['activeplayer1', 'activeplayer2'],
retired: <retired player list>,
joinedIn2007: <desired list>,
joinedLater: {
2008: <desired list>
}
}
}
}
```
* [PromisePlaceholder](
* _instance_
* [.setReviver(reviver)](
* [.getResults()](
* [.getRefs()](
* [.size()](
* [.exec()](
* [.collect(obj)](
* _static_
* [.withAsync](
<a name="PromisePlaceholder+setReviver"></a>
Sets a reviver otherwise plain assignment is used. Can be used to revive manually!
**Kind**: instance method of [<code>PromisePlaceholder</code>](
| Param | Type | Description |
| --- | --- | --- |
| reviver | <code>function</code> \| <code>string</code> | If reviver = 'ignore', the revival will be skipped and the values need to be revived manually |
<a name="PromisePlaceholder+getResults"></a>
Returns results array of execution
**Kind**: instance method of [<code>PromisePlaceholder</code>](
**Returns**: results
<a name="PromisePlaceholder+getRefs"></a>
Returns internal references
**Kind**: instance method of [<code>PromisePlaceholder</code>](
**Returns**: refs
<a name="PromisePlaceholder+size"></a>
**Kind**: instance method of [<code>PromisePlaceholder</code>](
**Returns**: Length of current of functions in the queue
<a name="PromisePlaceholder+exec"></a>
Calls async.parallel and stores the values at the respective places!
**Kind**: instance method of [<code>PromisePlaceholder</code>](
**Returns**: Result of async.parallel (may be discarded)
<a name="PromisePlaceholder+collect"></a>
Instead of calling the promisePlaceholder at every step, it may be desirable to deep iterate the object and collect all the functions!
**Kind**: instance method of [<code>PromisePlaceholder</code>](
| Param | Type |
| --- | --- |
| obj | <code>Object</code> |
**Example**
```js
// In the example for [Placeholder](Placeholder), instead of wrapping every object having a promise inside a pp() call,
// just call once like:
const obj = {
data1: {
teams: async () => getTeamsFromApi(),
playersInfo: {
active: async () => getActivePlayersFromApi(),
retired: async () => getRetiredPlayersFromApi(),
joinedIn2007: async () => getPlayersFromApi(2007),
joinedLater: {
2008: async () => getJoinedLaterThanFromApi(2007)
}
}
}
}
// Now:
await (new PromisePlaceholder()).collect(obj).exec();
After await resumes, obj will have all the values instead of functions!
```
<a name="PromisePlaceholder.withAsync"></a>
Ability to pass custom async library such as another version of async or any other library.
Will map that libraries method instead of async as above
**Kind**: static property of [<code>PromisePlaceholder</code>](
**Example**
```js
// Instead of
new PromisePlaceholder //(See below),
new (PromisePlaceholder.withAsync(customAsyncOrOtherLib)) // The outer brackets are necessary
```
* * *
```sh
npm run test
```
š¤ **Praveen Ranjan Keshri**
* Github: [@prkeshri](https://github.com/prkeshri)
* LinkedIn: [@prkeshri](https://linkedin.com/in/prkeshri)
Contributions, issues and feature requests are welcome!<br />Feel free to check [issues page](https://github.com/prkeshri/node-promise-placeholder/issues).
Give a āļø if this project helped you!
***
_This README was generated with ā¤ļø by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_