我需要從 sqlite 資料庫收到一個承諾,但由于某種原因,async 函式內部沒有做任何事情,我該怎么做或如何獲取我需要的資料?
//SQLITE DB user check
function checkDBUser(userid) {
return new Promise(() => {
let author = userid
let sql = `SELECT Author author
FROM cooldowns
WHERE author = ?`;
db.get(sql, [author], (err, row) => {
if (err) {
return console.error(err.message);
}
return row
? row.author && console.log('User found! ' row.author)
: console.log('User not found!')
}
);
}); };
//Command for user check
if(command === 'check') {
async function checking() {
const user = await checkDBUser(message.author.id);
console.log('USER: ', user);
console.log('random log') // even this .log is not returned by async function
if (user == message.author.id) {
console.log('User exists!')
return;
}
} checking();
不等待,checkDBUser(message.author.id); return ,但是使用 await時User: Promise { <pending> },根本沒有真正記錄任何內容,就像字面上什么都不做一樣。我不知道問題出在哪里。
uj5u.com熱心網友回復:
您將您的包裹db.get()在一個 中new Promise(),但從未在該承諾上呼叫解決或拒絕,因此該承諾永遠不會做任何事情(從不解決或拒絕)。承諾不是魔術。如果您使用 來創建一個new Promise(),則必須使用傳遞給執行程式函式的決議和拒絕處理程式,并在異步操作完成時呼叫它們。
看起來是這樣的:
//SQLITE DB user check
function checkDBUser(userid) {
return new Promise((resolve, reject) => {
let sql = `SELECT Author author FROM cooldowns WHERE author = ?`;
db.get(sql, [userid], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
} else {
console.log(row);
// resolve with row.author or null
resolve(row ? row.author : null);
}
});
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434079.html
