问题描述
我正在尝试缓存结果并尝试使用 redis 缓存优化响应时间,但我想在 get 方法中实现生成器,但无法做到这一点,这是我的代码:
const userId = req.body.user_id;
client.get(userId,Promise.coroutine(function *(id){
if(!id){
var userDetails;
if(role != constants.userRoles.BUSInesS_OWNER){
userDetails = yield authenticateAccesstoken(apiReference,{accesstoken});
if(userDetails[0].role && userDetails[0].role != role){
res.status(constants.responseFlags.AUTHENTICATION_Failed);
// return responses.authenticationFailed(res,"Role not matched");
throw new Error("Role not matched");
}
req.body.user_id = userDetails[0].user_id;
client.setex(userId,3600,JSON.stringify(userDetails[0].user_id));
}else{
var BoDetails = yield commonFunc.authenticateAccesstoken(apiReference,accesstoken,"",role)
}
}
console.log("id is : ",id);
})().then(() => {
next();
return null;
每次打印 id 时都未定义,但是当我用普通函数或箭头函数打印时,它会打印在控制台上。
流程将类似于:
第一次 id 没有被缓存,但第二次它应该被缓存值
(如果(角色!=constants.userRoles.BUSInesS_OWNER)将是真的,因为我正在考虑这种特殊情况,所以 client.setex 方法将存储 id 的结果),但是这个东西只能在没有生成器功能的情况下工作,而不是这个解决方案。
那么,知道如何让它工作或我做错了什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)