#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() );
console.log( c() );
Y.toArray()
var odd = Y(function* (limit) {
for (var i = 0; i < limit; i++) {
if (i % 2) yield i;
}
});
console.log( odd.toArray(10) );
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'));
})();
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