使用一个端点解析两个GraphQL模式字段



有一种情况,有两种可能的类型来填充data属性。我已经做了一个union类型(ComponentItem),以确定需要返回哪个字段。第一个模式(ComponentItem1)应该只是一个硬编码列表,但第二个(ComponentItem2)是更动态的,它从查询中获得searchTerm,它实际上调用一个端点来填充list,也有hasNextPage属性。

下面是我创建的模式:

type Component {
id
title
data: ComponentItem
}
union ComponentItem = ComponentItem1 | ComponentItem2
type ComponentItem1 {
list: [List!]!
}
type ComponentItem2 {
hasNextPage: Boolean;
list: [List!]!
}

在解析器中,我正在解析联合类型,以生成适当的__typename:

const resolver: {
ComponentItem: {
__resolveType(object) {
if(object.searchTerm){
return "ComponentItem2"
}
return "ComponentItem1"
},
},
}

我目前正在做的是单独解决listhasNextPage,但在这种情况下,我将请求发送到同一端点两次。

const resolver = {
...resolver,
ComponentItem2: {
list: async (root, __, context) => {
const result = await fetch('search-endpoint')
return result?.items || []
}
hasNextPage: async (root, __, context) => {
const result = await fetch('search-endpoint')
return result?.hasNextPage || false
}
}

}

我的问题是如何在另一个字段解析器中共享该结果(除了使用"context")。或者,如果有更好的方法来处理这种情况,请告诉我。

可以选择在上下文中延迟加载该查询。每个解析器都会在上下文上调用该属性,但只有第一个解析器会实际执行该属性。

相关内容

  • 没有找到相关文章