从 sqlite 数据库请求承诺,等待不返回任何东西,异步函数不会记录任何东西
Requesting promise from sqlite database, await is not returning anything and async function won't log anything
我需要从 sqlite 数据库接收一个 promise,但由于某种原因,await 没有在 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); returns User: Promise { <pending> }
,但是对于 await,实际上什么都没有记录,就像字面意义上的什么都不做。不知道问题出在哪里
您将 db.get()
包装在 new Promise()
中,但从未对该承诺调用 resolve 或 reject,因此该承诺永远不会做任何事情(永远不会解决或拒绝)。承诺不是魔法。如果您使用 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);
}
});
});
}
我需要从 sqlite 数据库接收一个 promise,但由于某种原因,await 没有在 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); returns User: Promise { <pending> }
,但是对于 await,实际上什么都没有记录,就像字面意义上的什么都不做。不知道问题出在哪里
您将 db.get()
包装在 new Promise()
中,但从未对该承诺调用 resolve 或 reject,因此该承诺永远不会做任何事情(永远不会解决或拒绝)。承诺不是魔法。如果您使用 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);
}
});
});
}