Node asynchronous parallel inside a waterfall

I am creating a server in Nodejs to retrieve data from some database. I had been working with the asynchronous library for some time and figured out some things, such as putting a waterfall inside a parallel function.

I came across a problem when I first need to execute a query, and then use this query result in other queries that can run at the same time. The code looks something like this:

async.waterfall([ function(callback) { connection.query( query, function(err, rows, fields) { if (!err) { callback(null,rows); } else { callback(null,"SORRY"); } } ); }, async.parallel([ function(resultFromWaterfall,callback) { connection.query(query, function(err, rows, fields) { if (!err) { callback(null,rows); } else { callback(null,"SORRY"); } } ); }, function(resultFromWaterfall,callback) { connection.query(query, function(err, rows, fields) { if (!err) { callback(null,rows); } else { callback(null,"SORRY"); } } ); } ]) ], finalCallback ); 

Now my problem is to access the result from the waterfall function and use it in parallel functions.

+5
source share
2 answers
 async.waterfall([ function(callback) { connection.query(query, function(err, rows, fields) { if (!err) { callback(null, rows); } else { callback(null, "SORRY"); } } ); }, function(prevData,callback){ console.log(prevData);//Use it whereever you want. async.parallel([ function(callbackOfAsyncParallel) { connection.query(query1, function(err, rows1, fields1) { if (!err) { callbackOfAsyncParallel(null, rows1); } else { callbackOfAsyncParallel(null, "SORRY1"); } } ); }, function(callback) { connection.query(query2, function(err, rows2, fields2) { if (!err) { callbackOfAsyncParallel(null, rows2); } else { callbackOfAsyncParallel(null, "SORRY2"); } } ); } ],function mainCBOfParallel(err,reuslts){ if(!err){ //this will be done after tasks in async.parallel are finished. callback(null,results); //results[0]===>rows1 //results[1]===>rows2 } }); } ], finalCallback); 

You have two errors in the code,

  • tasks must be completed.
  • async.parallel has only callbacks in its tasks.

Update

There are callbacks ( callbackOfAsyncParallel ) that will be called when the task in async.parallel completed.

It should not call async.waterfall callback . If possible, there may be errors / unexpected results.

+3
source

Try it.

  async.waterfall([ function(callback) { connection.query(query, function(err, rows, fields) { if (!err) { callback(null, rows); } else { callback(null, "SORRY"); } } ); }, function(resultFromWaterfall, callback) { async.parallel([ function() { connection.query(query, function(err, rows, fields) { if (!err) { callback(null, rows); } else { callback(null, "SORRY"); } } ); }, function() { connection.query(query, function(err, rows, fields) { if (!err) { callback(null, rows); } else { callback(null, "SORRY"); } } ); } ]); } ], finalCallback); 
+1
source

All Articles