Apollo 客户端 3:查询在 Chrome 的“网络”选项卡中返回结果,但在我的应用程序中未定义

Gre*_*rel 5 react-apollo apollo-client

我正在使用 v3 获取一些数据@apollo/client。在Chrome的网络选项卡(http结果)中,我可以看到它返回数据和错误(我并不担心该错误,我现在知道为什么会这样。):

\n
{\n    data: {workItems: [,\xe2\x80\xa6]},\xe2\x80\xa6},\n    errors: [{message: "Error trying to resolve position."\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是在我的应用程序中,data返回未定义。

\n

这是我的客户端配置:

\n
export const graphqlClient = new ApolloClient({\n    cache: new InMemoryCache(),\n    link: ApolloLink.from([\n        onError(({ graphQLErrors, networkError }) => {\n            if (graphQLErrors) {\n                graphQLErrors.forEach(error =>\n                    console.log(\n                        `[GraphQL error]: ${JSON.stringify(error, null, 2)}`\n                    )\n                )\n            }\n            if (networkError) {\n                console.log(`[Network error]: ${networkError}`)\n            }\n        }),\n        apolloLink\n    ])\n})\n
Run Code Online (Sandbox Code Playgroud)\n

我的查询:

\n
gql`\n    query WorkItems($ppm: String) {\n        workItems(where: { ppm: $ppm }) {\n            ...WorkItemKanban\n        }\n    }\n    ${workItemFragment.workItemKanban}\n`\n\nconst useWorkItemListDataGraphql = (args: {\n    query: DocumentNode\n    variables: { parent: string } | { ppm: string }\n}) => {\n    const { variables, query } = args\n    const { data, error, loading, refetch } = useQuery<\n        { workItems: WorkItem[] },\n        { parent: string } | { ppm: string }\n    >(query, {\n        pollInterval: 180000,\n        variables\n    })\n  \n    // data returns undefined, but error shows the same error as in Chrome's network tab\n    return { ...data, error, loading, refetch }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我不知道从哪里开始找出问题所在。在没有错误的情况下加载数据是有效的,但我认为这不是正常行为,它应该始终加载与我在 Chrome 选项卡中看到的相同的数据。

\n

Gre*_*rel 1

正如Apollo 文档 - 错误策略中所解释的

默认情况下,错误策略将任何 GraphQL 错误视为网络错误并结束请求链

因此默认情况下,如果出现错误,Apollo 客户端就会返回。undefined

添加errorPolicy: 'all'查询选项或客户端默认选项可以解决该问题。

例子:

const { loading, error, data } = useQuery(MY_QUERY, { errorPolicy: 'all' });
Run Code Online (Sandbox Code Playgroud)