結果をキャッシュし、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 の結果を格納するためです)、しかし、これはジェネレーター機能なしでのみ機能し、このソリューションでは機能しません。
それで、どうすればそれを機能させることができますか、または私が間違っていることはありますか?