I am using
- Node.js
- Express.js
- node-mysql.js
- async.js
I am making multiple asynchronous queries to my DB, but every query relies on the previous one's results, so I decided to use the waterfall
method.
Right now, my code looks like this (I simplified it with only 2 queries, but there are more):
async.waterfall([
function(cb){
db.query(insertQuery,values,cb);
},
function(results,_,cb){
var lastInsertId = results.insertId;
db.query(anotherInsertQuery,otherValues.concat(lastInsertId),cb);
}
],callback);
But I found my code a bit messy, especially the function(cb) { ... }
wraps.
Is there a way to get rid of those annoying function(cb){...}
?
1 Answer 1
I think not.
Whereas you find the function(cb) { ... }
wraps a bit messy, I think that this is the most elegant way to show readers that this is a separate functions, and that stuff is about to get asynchronous.. Again, compared to other approaches, this is quite clean.
Also, (I know this is just a small example), consider not using the lastInsertId
variable. You could simply go for
async.waterfall([
function(cb){
db.query(insertQuery,values,cb);
},
function(results,_,cb){
db.query(anotherInsertQuery,otherValues.concat(results.insertId),cb);
}
],callback);
-
1\$\begingroup\$ Thanks @konijn. I'll wait a bit to see if someone comes with another answer, and will accept yours otherwise. \$\endgroup\$Waldo Jeffers– Waldo Jeffers2014年08月25日 08:43:22 +00:00Commented Aug 25, 2014 at 8:43
Explore related questions
See similar questions with these tags.
node-mysql.js
, since it's related with that, but I couldn't create it (not enough reputation). Do you think you could do that ? \$\endgroup\$async.js
existed, with only one question so... But anyway, thanks for the welcome ! Sorry about that, I would like to know what's the cleanest way to do what I'm trying to do using theasync.js
module. What methods (apply
,waterfall
...) or structure should I use ? Is that more clear ? Do you think I should edit my question ? \$\endgroup\$