【发布时间】:2021-05-26 22:42:26
【问题描述】:
当执行return true 或return false 时,它不会await 那些结果并返回undefined。
但是它确实正确地执行了if 语句,只是返回true 或false 不起作用
在登录row.channelOwner 之前先登录undefined,这让我觉得它没有等待返回。
(channel为频道ID,user为用户ID)
client.on('message', async message => {
if (!message.content.startsWith('=test') || message.author.bot) return;
const args = message.content.slice('=test'.length).trim().split(' ');
var result = await cowner(args[0],args[1])
console.log(result)
})
cowner = async function(channel, user) {
let query = `SELECT channelOwner FROM voice WHERE channelID = ${channel}`
db.each(query, [], async (err, row) => {
if (err) {
console.log(err);
}
console.log(row.channelOwner)
console.log(user) // row.channelOwner and user is the same
// It logs reached if and reached else so the if statement is working
if (user === row.channelOwner) {
console.log('reached if')
return true;
} else {
console.log('reached else')
return false;
}
})
}
【问题讨论】:
-
您正在从 db.each 中使用的匿名函数返回。但是您没有从
cowner函数返回任何内容,因此它返回未定义。异步也是不必要的,因为你没有在等待任何东西。 -
使用 asyc/await 不会将回调转换为 Promise。请改用 promise 构造函数。
-
@Timjime
db.each返回什么? -
所以如果这是
sqlite3,db.each会遍历每一行,但仍然不会改变回调不返回任何内容的事实。相反,您可能想要使用db.all甚至db.get,如果保证结果只有零或一行并将其包装在Promise中。请阅读此答案:stackoverflow.com/questions/46994203/…
标签: javascript node.js async-await discord discord.js