[英]Async function on other js files always return undefined, but the function run
我有一个异步 function 在 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
}
每当我做控制台日志结果总是显示未定义,我已经添加等待或然后在 function,但控制台日志结果总是显示未定义
您从 a.then or.catch 回调返回,这是一个 function。
您需要将 client.get 块包装在 Promise 中:
return new Promise((resolve, reject) => { ... });
然后,使用resolve()
来“成功”,并使用reject()
来“失败”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.