javascript - 其他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
}
每当我做控制台日志结果总是显示未定义时,我已经在函数上添加了等待或然后,但控制台日志结果总是显示未定义
解决方案
您从 .then 或 .catch 回调中返回,这是一个函数。
您需要将 client.get 块包装在 Promise 中:
return new Promise((resolve, reject) => { ... });
然后,用于resolve()
“成功”和reject()
“失败”。
推荐阅读
- python-3.x - 与 fastapi 并行执行一个函数
- java - 如何从文本文件中插入和保存数组中的数据?(在Java中)
- python - 从 Flink Dashboard 初始化 JobManager 期间作业失败
- google-apps-script - 服务器返回代码 429 时如何重启循环
- mongodb - 如何优化 mongodb 中的聚合查询(查询包含 $lookup 和 $match)
- powershell - 搜索包含多行的文本
- python - 命令“python setup.py egg_info”
- excel - VBA 仅返回函数的唯一值
- python - 如果 2020 年日期的预订价值小于 25,则将其替换为去年 7 天的熊猫平均价值
- typescript - 为什么构造函数不能被键入为具有静态成员的可调用对象,或者它只是打字稿限制,是否有正当理由?