使用复合键的DataLoader

时间:2019-12-15 23:00:30

标签: 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之类的名称来调用Google Maps API,该怎么办?我的密钥需要是lat和long的唯一组合,并且在调用服务时需要将lat和long分开

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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