我了解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,该怎么办?我的密钥需要是经度和纬度的唯一组合,并且在调用服务时需要将经度和纬度分开

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


认为我可以使用映射根据键查找要传递给我的服务的值,这样的用例是否有很好的模式?

最佳答案

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


  为给定的加载密钥生成缓存密钥。当对象是键并且两个对象应视为等效时很有用。


只要两个相同的传入密钥产生相同的缓存密钥,实际的缓存密钥的格式就无关紧要。这可能是对象的陷阱,其中两个相同的对象可以具有不同顺序的属性,从而导致不同的字符串键,除非在进行字符串化时对属性进行特殊排序。但是,对于坐标来说,这不是问题。在您的情况下,假设您的坐标以数组形式传入,我想以下内容就足够了:

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

09-16 10:03