gco

Generator based flow control that supports promises.

Usage no npm install needed!

<script type="module">
  import gco from 'https://cdn.skypack.dev/gco';
</script>

README

gco

Generator based flow-control that supports promises.

build status coverage status npm version npm downloads dependency status devDependency status

Sauce Test Status

Motivation

Developed for a specific use-case, and for learning purposes. Heavily inspired by co, which I recommend using if you're after a more feature-rich and battle-tested solution :smiley:. You'll see co's influence in the documentation, API, and unit tests.

Compatibility

Babel is used to transpile ES2015 to ES5. gco is tested against:

  • The latest stable Node.js release
  • The latest LTS Node.js release
  • The browsers listed in the build matrix above.

Installation

$ npm i gco

Usage

import gco from 'gco';

const onError = ({ stack }) => console.error(stack);

// Yield any promise.
gco(function* () {
  const result = yield Promise.resolve(true);
  console.log(result);
  // -> true
}).catch(onError);

// Yield an array to resolve multiple promises in parallel.
gco(function* () {
  const a = Promise.resolve(1);
  const b = Promise.resolve(2);
  const c = Promise.resolve(3);
  const result = yield [a, b, c];
  console.log(result);
  // -> [1, 2, 3]
}).catch(onError);

// Yield an object to resolve multiple promises in parallel.
gco(function* () {
  const res = yield {
    1: Promise.resolve(1),
    2: Promise.resolve(2),
  };
  console.log(res);
  // -> { 1: 1, 2: 2 }
}).catch(onError);

// Errors can be try/catched.
gco(function* () {
  try {
    yield Promise.reject(new Error('boom'));
  } catch (error) {
    console.error(error.message);
    // -> 'boom'
  }
}).catch(onError);

To run the above examples:

$ npm run example -s

API

gco(fn*).then(value =>)

Returns a promise that resolves a generator.

Tests

$ npm run test:local

License

MIT