yielding

0.3.1 • Public • Published

yielding NPM version Build Status

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 (% 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

Bitdeli Badge

Package Sidebar

Install

npm i yielding

Weekly Downloads

1

Version

0.3.1

License

MIT

Last publish

Collaborators

  • mikach