It is 2016, Node has had nearly full ES6 support since v4, and Promises have been around since 0.12. It's time to leave callbacks in the dust IMO.
I'm working on a commander.js-based CLI util which leverages a lot of async operations - http requests and user input. I want to wrap the Commander action
s in async functions so that they can be treated as promises, and also to support generators (useful for the co-prompt
library I'm using for user input).
I've tried wrapping the CB with co
in two ways:
1)
program.command('myCmd')
.action(program => co(function* (program) {...})
.catch(err => console.log(err.stack)) );
and
2) program.command('myCmd').action(co.wrap(function* (program) { .. }));
The problem with 1) is that the program
parameter isn't passed
The problem with 2) is that errors are swallowed...
I'd really like to get this working as it yields much nicer code in my use case - involving a lot of http requests and also waiting for user input using the co-prompt
library..
Is it a better option altogether perhaps to wrap program.Command.prototype.action
somehow?
thanks!
I've used a bespoke version of something like
co
to get adb.exec
function which uses yield to do database request. You can pass parameters into a generator function (I pass in a connection object - see the comment where I do it).Here is by db.exec function that is very similar to what
co
doesthe connection object also wraps by database connection object and provides a generator function ability to process the rows of the results from the database, but I won't post that here (although the example below is using it to process the rows).
Here is an example of using the exec function to run a sequence of sql