使用复合键的 DataLoader

DataLoader using Composite keys

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

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

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

是否有使用组合键的好的模式?

如果我需要使用经纬度之类的东西调用 google 地图 api 怎么办?我的密钥需要是纬度和经度的唯一组合,并且在调用我的服务时我需要拆分纬度和经度

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

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

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

Produces cache key for a given load key. Useful when objects are keys and two objects should be considered equivalent.

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

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