假设我有这样的架构
type Result{
fieldA: TypeA,
fieldB: TypeB,
# other fileds ...
}
fieldB基于fieldA计算:
function getData(){...}
function transformData(){...}
resolverA:()=>getData()
resolverB:()=>transformData(getData())
查询可以要求字段A / B
中的一个/两个或两个假设getData()和transformData()都是昂贵的操作,
如何编写解析器以便:
1)resolverB使用来自resolverA的解析数据
2)当两个AB字段都在查询中时,getData仅被调用一次
3)当只询问其他字段时,没有getData / transformData被调用
答案 0 :(得分:2)
我可能只会记住getData
并完成它。您可以使用dataloader或编写自己的简单闭包,在下一个刻度上重置它的数据:
const getData = (function () {
let cache
return function () {
if (cache) return cache
cache = // do heavy stuff
process.nextTick(() => {
cache = null
})
return cache
}
})()