我正在尝试缓存结果并尝试使用 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 没有被缓存,但第二次它应该被缓存值
( if (role != constants.userRoles.BUSINESS_OWNER) 将是真的,因为我正在采取这种特殊情况,所以 client.setex 方法将存储 id 的结果),但是这个东西只能在没有生成器功能的情况下工作,而不是这个解决方案。
那么,任何想法我怎样才能让它工作或我做错了什么?