2016-12-10 17 views
1

我試圖使用Knex與異步/等待,因爲Knex有一個Promise接口。我的代碼如下。如何使用knex與async/await?

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); 

我希望得到我的查詢中的行後面,但輸出

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

回答

5

你應該叫等待在異步簽署功能。這是我使用的模式。

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

我嘗試了這一點,它的工作,但我對於它爲什麼會感到困惑。在我原來的代碼中,'getUsers'是一個異步函數,它爲什麼不能在原始函數中工作? – ABC

+2

它也可以工作,但是如果沒有'await',代碼就不會等待承諾結果並執行下一行(console.log ..)。因爲這個'res'變量將被設置爲一個'未決'狀態的'Promise'實例。使用'await'關鍵字將確保promise的'resolve'或'reject'回調被調用。 –

1

異步函數返回的承諾,因此,你需要把從如許返回的值,因此await他們或他們使用.then()方法:

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