Complement for wait.for-es6: Sequential programming for node.js -and the browser-. End of callback hell - Original Wait.for, implemented using upcoming javascript/ES6-Harmony generators
npm install parallel-es6Parallel-ES6
===========
Complement for Wait.for-ES6: Sequential programming for node.js and the browser, end of callback hell.
check first: [Wait.for-ES6] (http://github.com/luciotato/waitfor-ES6),
Simple, straightforward abstraction.
By using wait.for and parallel, you can call any nodejs standard async function in sequential/Sync mode or in parallel, waiting for result data,
without blocking node's event loop.
Definitions:
---
* A nodejs standard async function is a function in which the last parameter is a callback: function(err,data)
* A "fiber" in this context is a "generator" that yields async callable functions.
Advantages:
javascript
// (inside a generator) call async function fs.readfile(path,enconding),
// wait for result, return data
console.log('contents of file: ', yield wait.for(fs.readfile, '/etc/file.txt', 'utf8'));
`
DNS testing, using pure node.js (a little of callback hell):
`javascript
var dns = require("dns");
function test(){
dns.resolve4("google.com", function(err, addresses) {
if (err) throw err;
for (var i = 0; i < addresses.length; i++) {
var a = addresses[i];
dns.reverse(a, function (err, data) {
if (err) throw err;
console.log("reverse for " + a + ": " + JSON.stringify(data));
});
};
});
}
test();
`
The same code, using wait.for and parallel (faster):
`javascript
var dns = require("dns"), wait=require('wait.for-ES6');
function* getReverse(addr){
return yield wait.for(dns.reverse,addr);
}
function* test(){
var addresses = yield wait.for(dns.resolve4,"google.com");
var reverses = yield wait.for(parallel.map,addresses, getReverse);
console.log("reverses", reverses);
}
wait.launchFiber(test);
`
Alternative, fancy syntax, omiting wait.for
`javascript
function* getReverse(addr){
return yield [dns.reverse,addr];
}
function* test(){
var addresses = yield [dns.resolve4,"google.com"];
var reverses = yield [parallel.map,addresses, getReverse];
console.log("reverses", reverses);
}
wait.launchFiber(test);
``