我知道这个问题在这里已经有了答案 (如何从异步调用中返回响应?),但我找不到任何能满足我需要的东西。
我有一个从数据库中读取数据的基本函数,然后根据数据返回一个值。这就是它的样子。
function checkcooldown(name, user){
//gets the row from the sqlite database (returns a promise)
sql.get(`SELECT * FROM usercooldowns WHERE user = "${user}" AND name = "${name}"`).then((row) => {
if(!row || row == undefined){return 0} //if the user doesn't have a cooldown, return 0
else if(row.time <= getcurdate()){//if the cooldown is already over, return 0
return 0
}
else{//if a cooldown exists, return the number of seconds it lasts (currently dummy number)
return 123
}
})
}
我想用类似这样的if语句来调用这个函数。
if(await checkcooldown(name, user) > 0){//do something}
else{//add a new cooldown}
这当然不行,因为函数返回的是undefined。
然而,我在上面的帖子中找到的解决方案都没有帮我解决这个问题,它们最终都是使用多行函数或解析承诺。有没有什么办法可以让它变得足够紧凑,可以像我上面描述的那样放在一个简单的if语句中?
谢谢你的帮助^^。
为什么不直接使用 async
await
语法,如果你想简明扼要?
async function checkcooldown(name, user) {
try {
const row = await sql.get(`SELECT * FROM usercooldowns WHERE user = "${user}" AND name = "${name}"`)
} catch(err) {
console.log(err)
}
if(row.time <= getcurdate()) {
return 0
} else {
return 123
}
}