MadMaxAPP
MadMaxAPP

Reputation: 1075

How to make dynamic number of mysql queries in nodejs?

I'm struggeling a bit with how to shoot several SQL update queries to the MySQL server from NodeJS. I need some kind of synchronous execution.

Situation:

This is more or less a general question on how to solve situations like this with NodeJS. As I understood, MySQL queries are executed asynchronously.

How can it be achieved, that I can loop through the array to build a list of entries which need to be updated an other to be created in MySQL table? Is there any "synchronous" MySQL query?

Regards

Jens

Upvotes: 0

Views: 300

Answers (1)

Evert
Evert

Reputation: 99523

You can probably really benefit from switching to an async/await MySQL client. Chances are that the client you are using already has support for this.

But even if yours doesn't, and you can't switch it's still by far the easiest to write a helper function that converts your callback-based mysql to a promise-based one.

Effectively the approach becomes:

for(const formValue of formValues) {
   await mysql.query('....');
}

Doing this without async/await and with callbacks is significantly harder.

I imagine one approach might be something like:

function doQueriesForFormValue(formValues, cb) {

   const queries = [];
   for(const formvalue of formValues) {
     queries.push('...');
   }

   runQueries(queries, cb);

}

function runQueries(queries, cb) {

  // Grab the first query
  const currentQuery = queries[0];

  mysql.query(currentQuery, (res, err) {

    if (err) {
       cb(null, err);
    }

    if (currentQueries.length>1) {
      // Do the next query
      runQueries(currentQueries.slice(1), cb);
    } else {
      // call final callback
      cb(true);
    }  

  });

}

I wrote an article with some effective patterns for working with MySQL in Node.js. Perhaps it's helpful

Upvotes: 1

Related Questions