graphql server,resolver依赖于另一个解析器

时间:2017-11-29 18:13:17

标签: graphql apollo-server

假设我有这样的架构

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被调用

1 个答案:

答案 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
  }
})()