从 sqlite 数据库请求承诺,await 不返回任何内容,异步函数不会记录任何内容



我需要从sqlite数据库收到一个promise,但由于某种原因,wait没有在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();

在没有等待的情况下,检查DBUser(message.author.id(;返回User: Promise { <pending> },但是使用wait,实际上什么都没有记录,就像什么都没做一样。我不知道问题出在哪里。

您将db.get()封装在new Promise()中,但从未对该promise调用resolve或reject,因此promise从不执行任何操作(从不解析或拒绝(。承诺不是魔法。如果使用new Promise()创建一个,则必须使用传递给executor函数的解析和拒绝处理程序,并在异步操作完成时调用它们。

以下是它的样子:

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

相关内容

最新更新