首页 > 解决方案 > 其他js文件上的异步函数总是返回未定义,但函数运行

问题描述

我有一个异步函数,它在 js 文件上返回 1 或 0 值,这就是代码

checkAuthentication: async function (client) {
        //search redis
        //get value key "token"
        try{
            var tempValue, tempErr

            client.get("token", async (err, value) => {
                tempValue = value
                tempErr = err
                if (tempErr) { // kalo gk ada di redis
                    console.log(tempErr) 
                    return 0
                }
                if (tempValue !== null) {//ADA DI REDIS
                    var start = new Date()
                    var responseRedis = JSON.parse(tempValue)
                    // console.log('this is old data' + responseRedis.accessToken)
    
                    var end = (new Date() - start)
                    console.info('Execution time: %d ms', end)
                    
                    jwt.verify(responseRedis.accessToken, accessTokenSecret, function (err, decoded) {//check if token expired or not
                        if (err) {//TOKEN EXPIRED
                            console.log(err)
                            return 0
                        } else {//TOKEN TIDAK EXPIRED
                            //tuker token jd refreshesh token
                            const newRefreshToken = jwt.sign({ username: decoded.user_name }, accessTokenSecret, { expiresIn: '24h' });
                            var data_send_redis = JSON.stringify({
                                "accessToken": newRefreshToken,
                            });
                            //store to redis 
                            // console.log('this is  new data' + data_send_redis)
                            client.setex("token", 600, data_send_redis);
                            return 1
                        }
                    });
                } else { //GK ADA DI REDIS TOKENYA
                    //LOG OUT
                    console.log('token not found')
                    return 0
                }
            })
        }catch (err){
            console.log(err)
            return 0
        }
    }

另一方面,我试图在其他 js 文件中获取名为 a 的变量中的值

var a = await model_auth_token.checkAuthentication(client)
console.log('hasil check auth : return ' + a)
if(a == 0){
    client.del('token', function(err, response) {
        if (response == 1) {
           console.log("Deleted Successfully!")
        } else{
         console.log("Fail to Delete")
         console.log(err)
        }
     });
     res.redirect('/panel/panel_login')
     return
}

每当我做控制台日志结果总是显示未定义时,我已经在函数上添加了等待或然后,但控制台日志结果总是显示未定义

标签: javascriptnode.jsejs

解决方案


您从 .then 或 .catch 回调中返回,这是一个函数。

您需要将 client.get 块包装在 Promise 中:

return new Promise((resolve, reject) => { ... });

然后,用于resolve()“成功”和reject()“失败”。


推荐阅读