javascript 使用组合键的DataLoader

wj8zmpe1  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(143)

我了解dataLoader如何使用简单的键:

import DataLoader from 'dataloader';
import myService from './services/service';

export default () => new DataLoader((keys: any) => Promise.all(keys.map((key: string) => myService(key))));

有没有使用组合键的好模式?
如果我需要使用lat和long之类的字符调用google maps API,我的键需要是lat和long的唯一组合,并且在调用服务时需要将lat和long分开

const key = `${latitude}|${longitude}`;

考虑到我可以使用Map来查找基于键传递给我的服务的值,对于这样的用例是否有一个好的模式?

erhoui1w

erhoui1w1#

您可以传入一个非字符串值作为键,然后利用cacheKeyFn选项让DataLoader将键转换为适当的字符串表示。
为给定的加载键生成缓存键。当对象是键并且两个对象应该被认为是等价的时很有用。
实际缓存键的格式无关紧要,只要两个相同的传入键产生相同的缓存键。这可能是对象的陷阱,两个相同的对象可能具有不同顺序的属性,从而产生不同的字符串键,除非在字符串化时专门对属性进行排序。不过,对于坐标,这应该不是问题。在您的情况下,假设你的坐标是以数组的形式传入的,我想下面的代码就足够了:

new DataLoader(
  batchLoadFn, 
  { 
    cacheKeyFn: (key) => { return key.toString() }
  }
)

相关问题