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>