Lodash - 可选的 Memoize
Lodash - Optional Memoize
是否可以在调用 lodash _.memoize()
中包装的函数时避免从缓存中获取结果?
例如
import { memoize } from "lodash";
export const getUserPost = memoize(
async (userId, postId) => {
const postRef = firestore
.collection("posts")
.doc(userId)
.collection("userPosts")
.doc(postId);
const postDoc = await postRef.get();
...
return parseUserPost(postDoc);
},
(userId, postId) => `[${userId},${postId}]`
);
如果我调用 getUserPost("raul", "postId")
如果它们在缓存中,我将始终获得缓存结果...
是否可以使用带有某种参数的 memoize
方法来代替从服务器获取?
类似
getUserPost("raul", "postId", { cached: false });
默认情况下_.memoize()
使用第一个参数(userId
在你的例子中)作为记忆缓存中的键,或者它使用解析器,就像你提供的那样:
(userId, postId) =>`[${userId},${postId}]`
当您不想将特定值设为 return 相同结果时,您可以从缓存中删除该键:
示例:
const fn = _.memoize(x => x + Math.ceil(Math.random() * 1000))
console.log(fn(1))
console.log(fn(1))
fn.cache.delete(1) // remove a paremter from the cache
console.log(fn(1))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
是否可以在调用 lodash _.memoize()
中包装的函数时避免从缓存中获取结果?
例如
import { memoize } from "lodash";
export const getUserPost = memoize(
async (userId, postId) => {
const postRef = firestore
.collection("posts")
.doc(userId)
.collection("userPosts")
.doc(postId);
const postDoc = await postRef.get();
...
return parseUserPost(postDoc);
},
(userId, postId) => `[${userId},${postId}]`
);
如果我调用 getUserPost("raul", "postId")
如果它们在缓存中,我将始终获得缓存结果...
是否可以使用带有某种参数的 memoize
方法来代替从服务器获取?
类似
getUserPost("raul", "postId", { cached: false });
默认情况下_.memoize()
使用第一个参数(userId
在你的例子中)作为记忆缓存中的键,或者它使用解析器,就像你提供的那样:
(userId, postId) =>`[${userId},${postId}]`
当您不想将特定值设为 return 相同结果时,您可以从缓存中删除该键:
示例:
const fn = _.memoize(x => x + Math.ceil(Math.random() * 1000))
console.log(fn(1))
console.log(fn(1))
fn.cache.delete(1) // remove a paremter from the cache
console.log(fn(1))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>