Search code examples
javascriptpostgresqlasync-awaitpg

pg client.query() does not wait at the await


I am don't understand why the await in front of a pg client request does not seem to work as the code after it runs before the code inside the client.query() function.

const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'

const client = new Client({
    connectionString:connectionString
})

client.connect()

database_func()

async function database_func() {
  await client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
    console.log('res')
    return;
  })
  client.end()
  console.log('after res')
}

I would expect the above to return this:

=> res
=> after res

Instead it returns:

=> after res
=> res

Solution

  • It looks like you're trying to do callbacks and async/await at the same time.

    const {Pool, Client} = require('pg')
    const connectionString = 'postgressql://user@localhost:5432/database'
    
    const client = new Client({
        connectionString:connectionString
    })
    
    client.connect()
    
    database_func()
    
    async function database_func() {
      // You should be doing callbacks OR async/await whenever you call a query,
      // You're doing both at the same time
    
      client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
        console.log('res')
        return;
      })
    
      // OR
    
      let res;
      try {
        res = await client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`);
      } catch (err) {
        console.error(err);
      }
    
      console.log(res);
      
      client.end();
      
      console.log('after res')
    }