返回函数中异步调用的响应。

问题描述 投票:0回答:1

我知道这个问题在这里已经有了答案 (如何从异步调用中返回响应?),但我找不到任何能满足我需要的东西。

我有一个从数据库中读取数据的基本函数,然后根据数据返回一个值。这就是它的样子。

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语句中?

谢谢你的帮助^^。

javascript asynchronous
1个回答
0
投票

为什么不直接使用 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
         }
     }
© www.soinside.com 2019 - 2024. All rights reserved.