title: Node.js returning a promise from a function
body: <p>I'm exploring the possibilities of promises and callbacks in node.js
  I'm trying to find a way for this code to work. Currently the issue I'm facing is that when I'm calling a function and want to use the return value, it is not ready yet. I know what I have to do, but don't know how. Basically, I have to make that insertAddress() returns a promise (so I can use the .then() on it), or takes a callback as a param. To do this, I also think databaseWork() should return a promise. But I don't know where to add it. 
  The issue is located in the 'console.log(out)', that runs before out variable is set (because insertAddress is still running).
  Here is my code</p>
  
  <pre><code>app.js
  -----
  
  const databaseWork = require('./db/mysql.js').databaseWork;
  
  app.use('/test',  (req, resp) =&gt; {
    var address = {
       country : "Country",
       city : "Randomcity",
       street : "Random",
       number : 6,
       postalcode : "A789",
       province : "a province"
     }
    var out = insertAddress(address);  //&lt;== takes time to finish, is not ready when the next console.log finishes
    console.log(out);
  });
  
  function insertAddress(address){
      var rows
      databaseWork(
        //Following anonymous function contains the actual workload. That has to be done inside a transaction
         async (connection) =&gt; {
         rows = await insertAddressQuery(address,connection);
         console.log(rows); //this one waits for insertAddressQuery to be complete
      })
      return rows; //this will run before insertAddressQuery is complete
  }
  
  
  function insertAddressQuery(address,connection) {
      return new Promise( (resolve, reject) =&gt; {
      //async job
        connection.query('INSERT INTO address (country,city,Street,number,postalcode,province) VALUES(?,?,?,?,?,?)', [address.country,'4','5',6,'7','8'] , (err, rows) =&gt; {
              if (err) {reject(err);}
                resolve(rows);
          });
      });
  };
  
  
  /db/mysql.js
  ------------
  
  var mysql = require('mysql');
  var dbpool = mysql.createPool({
    host: process.env.HOST_DB,
    user: process.env.USER_DB,
    password: process.env.PWD_DB,
    database: process.env.DB
  });
  
  function databaseWork(workload){
    dbpool.getConnection( async (err, connection) =&gt; {
        await beginTransaction(connection);
  
        await workload(connection);
  
        await commitTransaction(connection)
        connection.release();
      });
  }
  
  
  function beginTransaction(connection){
    return new Promise( (resolve, reject) =&gt; {
      //async job
      connection.beginTransaction( (err) =&gt; {
        if (err) {reject(err);}
          resolve();
      });
    });
  };
  
  
  
  function commitTransaction(connection) {
      return new Promise( (resolve, reject) =&gt; {
      //async job
      connection.commit( (err) =&gt; {
          if (err) {reject(err);}
            resolve();
          });
      });
  };
  
  exports.databaseWork = databaseWork;
  </code></pre>