yielding

Easy generators

npm install yielding
24 downloads in the last week
50 downloads in the last month

yielding

Easy generators.

Use Node version 0.11.x with --harmony-generators flag to work with es6 generators.

Installation

npm install yielding

Y()

var Y = require('yielding');

var c = Y(function* () {
    var a = yield 1;
    var b = yield 2;
    return a + b;
});

console.log( c.once() ); // 1
console.log( c() ); // 3

Y.toArray()

var odd = Y(function* (limit) {
    for (var i = 0; i < limit; i++) {
        if (i % 2) yield i;
    }
});

console.log( odd.toArray(10) ); // 1,3,5,7,9

Parallel execution

var get = Y.nwrap( require('request').get );

Y(function* () {
    var pages = ['http://google.com', 'http://yahoo.com', 'http://bing.com'];
    var content = yield pages.map(function(url) {
        return get(url);
    });
    console.log(content.map(function(c) { return c.body.length; }));
})();

Async code with wrapper for node functions

var read = Y.nwrap(fs.readFile);

function* getContent(filename) {
    var content = yield read(filename, 'utf-8');
    console.log(content.length);
};

Y(getContent)('./examples/Y.js');

With promises

var q = require('q');

var asyncFn = function(str) {
    var d = q.defer();
    setTimeout(function() {
        d.resolve(str);
    }, 1000);
    return d.promise;
};

Y(function* () {
    console.log(yield asyncFn('Hello'));
    console.log(yield asyncFn('World')); // 1 second later
})();

Creating promises

Y.ncall(fs.readFile, './examples/Y.js', 'utf-8').then(function(content) {
    console.log(content.length);
});

Errors handling

Y(function* () {
    try { 
      var content = yield Y.ncall(fs.readFile, 'non_exists_file', 'utf-8');
    } catch(e) {
      console.log('ERROR: ' + e.message);
    }
    console.log('done');
})();

SUSPEND-style

Y(function *async() {
    var content = yield fs.readFile('test/example.txt', 'utf8', async.resume);
})();

See more examples

npm loves you