diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/thenify/README.md | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/thenify/README.md')
| -rw-r--r-- | node_modules/thenify/README.md | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/node_modules/thenify/README.md b/node_modules/thenify/README.md new file mode 100644 index 00000000..3afce3e0 --- /dev/null +++ b/node_modules/thenify/README.md @@ -0,0 +1,120 @@ + +# thenify + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +Promisify a callback-based function using [`any-promise`](https://github.com/kevinbeaty/any-promise). + +- Preserves function names +- Uses a native promise implementation if available and tries to fall back to a promise implementation such as `bluebird` +- Converts multiple arguments from the callback into an `Array`, also support change the behavior by `options.multiArgs` +- Resulting function never deoptimizes +- Supports both callback and promise style + +An added benefit is that `throw`n errors in that async function will be caught by the promise! + +## API + +### fn = thenify(fn, options) + +Promisifies a function. + +### Options + +`options` are optional. + +- `options.withCallback` - support both callback and promise style, default to `false`. +- `options.multiArgs` - change the behavior when callback have multiple arguments. default to `true`. + - `true` - converts multiple arguments to an array + - `false`- always use the first argument + - `Array` - converts multiple arguments to an object with keys provided in `options.multiArgs` + +- Turn async functions into promises + +```js +var thenify = require('thenify'); + +var somethingAsync = thenify(function somethingAsync(a, b, c, callback) { + callback(null, a, b, c); +}); +``` + +- Backward compatible with callback + +```js +var thenify = require('thenify'); + +var somethingAsync = thenify(function somethingAsync(a, b, c, callback) { + callback(null, a, b, c); +}, { withCallback: true }); + +// somethingAsync(a, b, c).then(onFulfilled).catch(onRejected); +// somethingAsync(a, b, c, function () {}); +``` + +or use `thenify.withCallback()` + +```js +var thenify = require('thenify').withCallback; + +var somethingAsync = thenify(function somethingAsync(a, b, c, callback) { + callback(null, a, b, c); +}); + +// somethingAsync(a, b, c).then(onFulfilled).catch(onRejected); +// somethingAsync(a, b, c, function () {}); +``` + +- Always return the first argument in callback + +```js +var thenify = require('thenify'); + +var promise = thenify(function (callback) { + callback(null, 1, 2, 3); +}, { multiArgs: false }); + +// promise().then(function onFulfilled(value) { +// assert.equal(value, 1); +// }); +``` + +- Converts callback arguments to an object + +```js +var thenify = require('thenify'); + +var promise = thenify(function (callback) { + callback(null, 1, 2, 3); +}, { multiArgs: [ 'one', 'tow', 'three' ] }); + +// promise().then(function onFulfilled(value) { +// assert.deepEqual(value, { +// one: 1, +// tow: 2, +// three: 3 +// }); +// }); +``` + +[gitter-image]: https://badges.gitter.im/thenables/thenify.png +[gitter-url]: https://gitter.im/thenables/thenify +[npm-image]: https://img.shields.io/npm/v/thenify.svg?style=flat-square +[npm-url]: https://npmjs.org/package/thenify +[github-tag]: http://img.shields.io/github/tag/thenables/thenify.svg?style=flat-square +[github-url]: https://github.com/thenables/thenify/tags +[travis-image]: https://img.shields.io/travis/thenables/thenify.svg?style=flat-square +[travis-url]: https://travis-ci.org/thenables/thenify +[coveralls-image]: https://img.shields.io/coveralls/thenables/thenify.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/thenables/thenify +[david-image]: http://img.shields.io/david/thenables/thenify.svg?style=flat-square +[david-url]: https://david-dm.org/thenables/thenify +[license-image]: http://img.shields.io/npm/l/thenify.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/thenify.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/thenify |
