我試圖從我的 get_salt_and_hash() 函式回傳結果(一組 json 物件)。然后我想在另一個函式中使用結果。(在這種情況下,結果陣列的長度為 1。)
但是,在我的另一個函式中呼叫 get_salt_and_hash() 之后,當我嘗試列印物件時,我得到了未定義的結果。我不確定為什么,因為原始函式中的 console.log(results) 有效。有人可以幫我嗎。
const get_salt_and_hash = (email) => {
const query = `SELECT p_salt, p_hash FROM USERS_TABLE WHERE email= "${email}"`;
db.query(query, (err, results) => {
if (!err) {
console.log(results);
return results[0];
} else {
throw err
}
})}
const verify_user = (email, password) => {
let result_obj = get_salt_and_hash(email);
console.log(result_obj);
// const p_hash = result_obj['p_hash'];
// const p_salt = result_obj['p_salt']
}
我懷疑它與異步代碼有關,因為進行 db 查詢需要時間,但我對異步 javascript 幾乎一無所知,所以我認為最好問問其他人。
提前致謝!
uj5u.com熱心網友回復:
你是對的,從資料庫中獲取結果需要時間,所以只需承諾 query() 函式,這樣你就可以在 query() 函式呼叫上使用 await,我修改了下面的代碼并承諾了 query()。
// Not tested.
const util = require('util');
const get_salt_and_hash = async (email) => {
const query = `SELECT p_salt, p_hash FROM USERS_TABLE WHERE email= "${email}"`;
const promisifiedQuerFunction = util.promisify(db.query).bind(db);
let results = await promisifiedQuerFunction(query);
return results[0];
}
const verify_user = async (email, password) => {
let result_obj = await get_salt_and_hash(email);
console.log(result_obj);
}
您可以從這里學習如何撰寫異步函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/390749.html
標籤:javascript mysql 节点.js 表达
上一篇:JavaScript獲取延遲
下一篇:Res.send不是一個函式
