# Shorten my asynchronous DB queries, using async.js module

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){...} ?

• @Jamal : Thanks for the edit. I wanted to tag my post with 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 ? – Waldo Jeffers Aug 20 '14 at 14:34
• At the moment I don't think we need a node-mysql.js tag here – Simon Forsberg Aug 20 '14 at 14:36
• Welcome to Code Review btw, I don't find your question very clear. Are you asking if your implementation is good, or asking for alternative implementations? – Simon Forsberg Aug 20 '14 at 14:36
• @SimonAndréForsberg : Ok I understand. I first hesitated, because I thought it was too specific, but then found out that 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 the async.js module. What methods (apply, waterfall...) or structure should I use ? Is that more clear ? Do you think I should edit my question ? – Waldo Jeffers Aug 20 '14 at 14:41
• What exactly is the question @WaldoJeffers? Short and simple, because this is a pretty unclear question. – RubberDuck Aug 20 '14 at 14:55

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);

• Thanks @konijn. I'll wait a bit to see if someone comes with another answer, and will accept yours otherwise. – Waldo Jeffers Aug 25 '14 at 8:43