如何在异步/等待中使用knex?

ABC*_*ABC 2 javascript mysql knex.js

我正在尝试使用Knex和async/await,因为Knex有一个Promise接口.我的代码如下.

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);
Run Code Online (Sandbox Code Playgroud)

我希望得到我的查询行,但输出是

KNEX Promise {
_c: [],
_a: undefined,
_s: 0,
_d: false,
_v: undefined,
_h: 0,
_n: false }
Run Code Online (Sandbox Code Playgroud)

Tol*_*rak 7

您应该在异步签名函数中调用await.这是我使用的模式.

(async function(){
  const res = await getUsers();
  console.log('KNEX', res);
})()
Run Code Online (Sandbox Code Playgroud)

  • 它也可以工作,但是没有`await`代码不会等待promise结果并执行下一行(console.log ..).因此,`res`变量将被设置为具有`pending`状态的`Promise`实例.使用`await`关键字将确保调用promise的`resolve`或`reject`回调. (2认同)

mar*_*.47 5

异步函数返回承诺,因此您需要将返回的值getUsers视为承诺,因此await它们或.then()对它们使用方法:

getUsers().then((res) => console.log(res))
Run Code Online (Sandbox Code Playgroud)