# g2p

> Transform generator to promise

Latest version **1.0.0** (published 2016-05-27) · MIT license · 0 weekly downloads

## Install

```sh
npm install g2p
pnpm add g2p
yarn add g2p
bun add g2p
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2016-05-27 |
| First published | 2016-05-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 4.0.0 |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | popomore |
| Maintainers | popomore |
| Keywords | aa, async, await, generator, promise |

## Links

- npm: https://www.npmjs.com/package/g2p
- Repository: https://github.com/popomore/g2p
- Issues: https://github.com/popomore/g2p/issues
- npm.io page: https://npm.io/package/g2p

## Dependencies (1)

- [debug](https://npm.io/package/debug.md) ^2.2.0

## Alternatives

- [promise-throttle](https://npm.io/package/promise-throttle.md) — 44.2K weekly downloads
- [@commercetools/sync-actions](https://npm.io/package/@commercetools/sync-actions.md) — 25.1K weekly downloads
- [cwait](https://npm.io/package/cwait.md) — 21.4K weekly downloads
- [@ledgerhq/hw-app-cosmos](https://npm.io/package/@ledgerhq/hw-app-cosmos.md) — 4.2K weekly downloads
- [@financial-times/o-loading](https://npm.io/package/@financial-times/o-loading.md) — 2.8K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2016-05-27

## 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.

---
_Source: https://npm.io/package/g2p · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
