Javascript 使用复合键的数据加载器

Javascript 使用复合键的数据加载器,javascript,typescript,graphql,dataloader,Javascript,Typescript,Graphql,Dataloader,我了解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

我了解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之类的东西调用GoogleMapsAPI呢?我的密钥需要是lat和long的唯一组合,在调用我的服务时,我需要拆分lat和long

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

我认为我可以使用映射来查找基于键传递给我的服务的值,这样的用例有好的模式吗?

您可以传入一个非字符串值作为键,然后使用
cacheKeyFn
选项让DataLoader将键转换为适当的字符串表示形式

为给定的加载密钥生成缓存密钥。当对象是关键点且两个对象应被视为等效时,此选项非常有用

实际缓存键的格式无关紧要,只要两个相同的传入键产生相同的缓存键。这可能是对对象的一种纠错,其中两个相同的对象可以具有不同顺序的属性,从而产生不同的字符串键,除非在字符串化时专门对属性进行排序。不过,对于坐标来说,这不应该是个问题。在您的情况下,假设您的坐标作为数组传入,我认为以下内容就足够了:

function cacheKeyFn (key) {
  return key.toString()
}

如需更多讨论,请查看。