0

我正在尝试缓存结果并尝试使用 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 的结果),但是这个东西只能在没有生成器功能的情况下工作,而不是这个解决方案。
那么,任何想法我怎样才能让它工作或我做错了什么?

4

0 回答 0