@broofa/asyncproxy
Version:
A simple, intuitive solution for converting node-style APIs to Promises.
68 lines (46 loc) • 2.11 kB
Markdown
# asyncProxy
A simple, intuitive solution for converting node-style APIs to Promises.
This module is similar to utilities such as `bluebird.promisifyAll` and
`promiseproxy`. The main difference is that it's behavior is driven by calling
code rather than magical introspection or ad-hoc configuration options.
Key features ...
* **Tiny**. No dependencies, ~0.3KB when minified/compressed.
* **Zero API footprint**. Does not modify the original API.
* **Drop-in replacement**. asyncProxy objects are literal proxies for the original API. Treat them exactly as you would the original API.
* **Simple promisification logic**. Just add "Async" to method name. `api.fooAsync()` == `api.foo()`-promisified.
* **Simple multi-args logic**. API callback takes more than one argument? Array destructuring, FTW!
## Installation
You know the drill ...
```
npm i /asyncproxy
```
``` javascript
const asyncProxy = require('/asyncproxy');
```
## Example: Promisify `fs.readFile` (basic usage)
```javascript
// Wrap api in asyncProxy()
const fs = asyncProxy(require('fs'));
// An asyncProxy-ified apis is *identical* to the original api
console.log(fs === require('fs')); // ==> true
// ... but promisifies any method invoked as `${methodName}Async`
const fileContents = await fs.readFileAsync('README.md', 'utf8');
```
## Example: Promisify `child.exec` (multiple callback arguments)
Anytime 2+ arguments are passed to a callback, the Promise resolves to an
argument Array:
```
// Promisified `exec` method
const child_process = asyncProxy(require('child_process'));
// Use array destructuring to extract result values
let [stdout, stderr] = await execAsync('ls');
```
## Example: Custom method name pattern
Appending `Async` to indicate a promise-returning method is the general
convention, but this may not always be desirable. The `methodRegex` option
is used to detect which methods should be promisified.
E.g. To use an "async\_"-prefix:
```
const fs = asyncProxy(require('fs'), {methodRegex: /^async_/});
const fileContents = await fs.async_readFile('README.md', 'utf8');
```