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

问题描述 投票:0回答:1

有一种情况,有两种可能的类型来填充

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"
        },
    },
}

我目前正在做的是分别解析

list
hasNextPage
,但在这种情况下,我将请求发送到同一端点两次。

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
     }

   }
   
}

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

javascript node.js reactjs graphql apollo
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.