我花了很多時間閱讀這個,但我根本不知道如何解決它。
我有一個使用存盤在 SQL 資料庫中的令牌的應用程式。在應用程式可以繼續之前,我需要該令牌。
我試圖用“等待”來解決它,但它不起作用。SQL 查詢結果仍然“為時已晚”檢索。
const pool = mysql.createPool({
user : 'xxxx', // e.g. 'my-db-user'
password : "xxxx", // e.g. 'my-db-password'
database : "xxxx", // e.g. 'my-database'
// If connecting via localhost, specify the ip
host : "xxxx"
// If connecting via unix domain socket, specify the path
//socketPath : `/cloudsql/xxxx`,
});
const isAuthorized = async (userId) => {
let query = "SELECT * FROM auth WHERE id = 2";
await pool.query(query, (error,results) => {
if (!results[0]) {
console.log("No results");
return
} else {
tokenyay=results[0].refreshtoken;
console.log("results: " results[0].refreshtoken);
return results[0].refreshtoken;
}
});
await console.log("tokenyay: " tokenyay);
if (tokenyay != null && tokenyay != '') {
refreshTokenStore[userId] = tokenyay;
}
console.log(userId);
console.log(refreshTokenStore[userId] ? true : false);
return refreshTokenStore[userId] ? true : false;
};
uj5u.com熱心網友回復:
我不知道你pool是什么,但從回呼來看,我們可以看到該pool.query()方法是不可await用的。
Promise但是,您可以手動為其創建一個await-able,例如
await new Promise((resolve, reject) => {
pool.query(query, (error, results) => {
if (error) reject(error);
if (!results[0]) {
console.log("No results");
resolve(); // give `undefined` to the `await...` and make it stop waiting
return;
} else {
tokenyay = results[0].refreshtoken;
console.log("results: " results[0].refreshtoken);
resolve(results[0].refreshtoken);
}
})
});
編輯:
但是,由于 的結果await是從傳遞給 的值中獲得的resolve,因此我們不需要tokenyay在回呼內部進行賦值。我們可以tokenyay = await...改用。
tokenyay = await new Promise((resolve, reject) => {
pool.query(query, (error, results) => {
if (error) reject(error);
if (!results[0]) {
console.log("No results");
resolve(); // give `undefined` to the `await...` and make it stop waiting
return;
} else {
console.log("results: " results[0].refreshtoken);
resolve(results[0].refreshtoken);
}
})
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456175.html
