如何在节点js中使用带有redis get方法的生成器?

问题描述

我正在尝试缓存结果并尝试使用 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 (将#修改为@)