@kwayteow/utils - v0.6.0
    Preparing search index...

    Function deduplicatePromise

    • 创建一个请求去重函数,确保并发调用时函数只执行一次,所有调用者都能获取结果

      Type Parameters

      • T extends any[]

        函数参数类型

      • R

        函数返回值类型

      Parameters

      • fn: (...args: T) => R | Promise<R>

        需要去重的函数

      • Optionaloptions: DeduplicateOptions<T> = {}

        配置选项

      Returns DeduplicatedFunction<T, R>

      返回一个增强的去重函数

      // 基础用法
      const deduped = deduplicatePromise(async (query: string) => {
      return await searchAPI(query);
      });

      // 自定义key生成器
      const deduped = deduplicatePromise(
      async (user: User, options: SearchOptions) => searchAPI(user, options),
      {
      keyGenerator: (user, options) => `${user.id}-${options.type}`,
      cacheTime: 1000
      }
      );

      // 基于特定字段缓存
      const deduped = deduplicatePromise(
      async (user: User, query: string, timestamp: number) => searchAPI(user, query),
      {
      keyFields: [0, 1], // 只基于user和query参数生成key,忽略timestamp
      cacheTime: 500
      }
      );

      // 条件缓存
      const deduped = deduplicatePromise(
      async (query: string, useCache: boolean) => searchAPI(query),
      {
      shouldCache: (query, useCache) => useCache && query.length > 2,
      cacheTime: 1000
      }
      );