ABC
ABC

Reputation: 1467

How to use knex with async/await?

I'm trying to use Knex with async/await since Knex has a Promise interface. My code is below.

const db = makeKnex({
  client: 'mysql',
  connection: {
    host: process.env.MYSQL_HOST,
    user: process.env.MYSQL_USER,
    password: process.env.MYSQL_PASSWORD,
    database: process.env.MYSQL_DATABASE,
  },
  pool: { min: 0, max: 100 },
});

async function getUsers() {
  return await db.select()
  .from('users')
  .limit(10);
}
const res = getUsers();
console.log('KNEX', res);

I expected to get the rows of my query back, but the output is

KNEX Promise {
_c: [],
_a: undefined,
_s: 0,
_d: false,
_v: undefined,
_h: 0,
_n: false }

Upvotes: 8

Views: 24701

Answers (3)

Snivio
Snivio

Reputation: 1864

const functionName = async() => {
  let result = await db.select().('users').limit(10);
  return result;
}

Upvotes: 2

martin.macko.47
martin.macko.47

Reputation: 897

Async functions return promises, therefore you need to treat values returned from getUsers as promises, therefore await them or use .then() method on them:

getUsers().then((res) => console.log(res))

Upvotes: 7

Tolgahan Albayrak
Tolgahan Albayrak

Reputation: 3206

You should call await in a async signed function. Here is the pattern what I use.

(async function(){
  const res = await getUsers();
  console.log('KNEX', res);
})()

Upvotes: 13

Related Questions