Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/popomore/g2p
https://github.com/popomore/g2p
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/popomore/g2p
- Owner: popomore
- License: mit
- Created: 2016-05-27T19:09:00.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2016-05-27T19:45:14.000Z (over 8 years ago)
- Last Synced: 2024-11-20T15:26:23.569Z (about 2 months ago)
- Language: JavaScript
- Size: 2.93 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: History.md
- License: LICENSE
Awesome Lists containing this project
README
# generator2promise
Transform generator to promise
## Usage
Wrap the generator function yield a function that can return a Promise.
```js
const g2p = require('g2p');
const func = g2p(function*() {
return yield Promise.resolve('done');
});func()
.then(function(val) {
console.log(val); // => done
})
```You can bind the context and pass argument.
```js
const g2p = require('g2p');
const ctx = { key: 'done' };
const func = g2p(function*(val) {
return this.key + val;
}, ctx);func('done')
.then(function(val) {
console.log(val); // => donedone
})
```**You can't yield another generator function or thunk in the wrapped generator function.**
## Why?
If you have ever used co, and it's same as co.wrap. But it's simple for the future, it desugers from the async function.
async function will return a promise after calling, same as g2p. and always await a promise, not thunk or generator function. If you write code follow this, you can easily use async/await after it releases.
**Write you API in generator function and wrap it with g2p.**
```js
// lib/index.js
exports.test = function*() {
return yield promise;
};// index.js
const g2p = require('g2p');
const lib = require('./lib');
exports.test = g2p(lib.test, lib);
```**Make sure modules that you depend on always return promise**
If it's a generator function, you can use g2p.
If it's a thunk, you can wrap it with co.
If it's a callback, you can wrap it with co.
You can also wrap thunk or callback by yourself, leave co alone.