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 はキャッシュされませんが、2 回目は値をキャッシュする必要があります
(if (role != constants.userRoles.BUSINESS_OWNER) が true になるのは、その特定のケースを採用しているため、client.setex メソッドが id の結果を格納するためです)、しかし、これはジェネレーター機能なしでのみ機能し、このソリューションでは機能しません。
それで、どうすればそれを機能させることができますか、または私が間違っていることはありますか?

4

0 に答える 0