javascript - 使用复合键的 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}`;
认为我可以使用映射来查找基于键传递给我的服务的值,这样的用例是否有一个好的模式?
解决方案
您可以传入一个非字符串值作为键,然后利用该cacheKeyFn
选项让 DataLoader 将键转换为适当的字符串表示形式。
为给定的加载键生成缓存键。当对象是键并且两个对象应该被视为等效时很有用。
实际缓存键的格式无关紧要,只要两个相同的传入键导致相同的缓存键。这可能是对象的一个陷阱,其中两个相同的对象可以具有不同顺序的属性,从而导致不同的字符串键,除非您在字符串化时专门对属性进行排序。但是,对于坐标,这应该不是问题。在您的情况下,假设您的坐标作为数组传入,我想以下内容就足够了:
function cacheKeyFn (key) {
return key.toString()
}
推荐阅读
- java - 无法将 inputStream 复制到文件中
- couchbase - 如何使用视图查询沙发库进行计数
- android - Android P 上的 AndroidAdvertisingId 异常
- python - 如何在不违反 PEP-8 的情况下从另一个目录导入文件?
- php - php过滤数组
- java - DL4J 使用 Apache Spark 在 GPU 上运行(非训练)LSTM 神经网络?
- android - 从 Fragment 获取 viewPager 参考
- html - Tibco Spotfire。如何与锚点超链接
- python - AttributeError:模块“cv2.cv2”没有属性“CV_LOAD_IMAGE_COLOR”
- html5-canvas - 带有子路径的 HTML5 Canvas 非零填充规则