46 lines
1.7 KiB
Markdown
46 lines
1.7 KiB
Markdown
# Instapromise [![Circle CI](https://circleci.com/gh/exponentjs/instapromise.svg?style=svg)](https://circleci.com/gh/exponentjs/instapromise)
|
|
Promisify Node-style asynchronous functions by putting a `.promise` after them (or after the object for methods).
|
|
|
|
[![npm package](https://nodei.co/npm/instapromise.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/instapromise/)
|
|
|
|
If you use this library then if you put `.promise` after a Node-style
|
|
asynchronous function, it will turn it into a function that returns a promise
|
|
instead of taking a callback.
|
|
|
|
```js
|
|
import 'instapromise';
|
|
import fs from 'fs';
|
|
|
|
let p = fs.readFile.promise('/tmp/hello', 'utf8');
|
|
p.then(console.log);
|
|
```
|
|
|
|
The original function is available as a property on the promise-generating function (`.___instapromiseOriginalFunction___`).
|
|
|
|
If you want to promisify methods, use `.promise` after the object and before the method name.
|
|
|
|
```js
|
|
import 'instapromise';
|
|
import fs from 'fs';
|
|
|
|
let p = fs.promise.readFile('/tmp/hello', 'utf8');
|
|
p.then(console.log);
|
|
```
|
|
|
|
## Changelog
|
|
|
|
### 2.0.7
|
|
Non-enumerable properties like class methods are now promisified.
|
|
Functions with names that would cause syntax errors (like `default`) are supported.
|
|
|
|
### 2.0.3
|
|
|
|
The `___instapromiseOriginalFunction___` property is now non-enumerable so it doesn't show up when serializing functions whose `promise` property has been accessed before.
|
|
|
|
### 2.0.0
|
|
The `Promise` polyfill is no longer provided. 1.x provided a polyfill for environments without a native `Promise` implementation, but in general, most environments you'll use now provide `Promise`.
|
|
|
|
## Credits
|
|
|
|
This code is based on the proxying code used in [fibrous](https://github.com/goodeggs/fibrous/blob/master/src/fibrous.coffee).
|