等待 useLazyQuery 响应

Posted

技术标签:

【中文标题】等待 useLazyQuery 响应【英文标题】:Wait for useLazyQuery response 【发布时间】:2020-09-19 04:21:15 【问题描述】:

我需要在按下提交按钮时调用查询,然后处理响应。

我需要这样的东西:

const [checkEmail] = useLazyQuery(CHECK_EMAIL)
const handleSubmit = async () => 
  const res = await checkEmail( variables:  email: values.email )
  console.log(res) // handle response

尝试#1:

const [checkEmail,  data ] = useLazyQuery(CHECK_EMAIL)
const handleSubmit = async () => 
  const res = await checkEmail( variables:  email: values.email )
  console.log(data) // undefined the first time

提前致谢!

【问题讨论】:

【参考方案1】:

这对我有用:

const  refetch  = useQuery(CHECK_EMAIL, 
  skip: !values.email
)

const handleSubmit = async () => 
  const res = await refetch( variables:  email: values.email )
  console.log(res)

【讨论】:

在@apollo/react-hooks@4.0.0 中,重新获取接受参数作为变量(无需放入变量属性。所以它是refetch( email: values.email )【参考方案2】:

毕竟,这是我的解决方案。

export function useLazyQuery<TData = any, TVariables = OperationVariables>(query: DocumentNode) 
  const client = useApolloClient()
  return React.useCallback(
    (variables: TVariables) =>
      client.query<TData, TVariables>(
        query: query,
        variables: variables,
      ),
    [client]
  )

【讨论】:

谢谢你,伙计!这很棒。 这只是客户端/阿波罗客户端的闭包,因此响应被保存在闭包中 - 它不会立即被调用吗? UseLazy 应该随时待命——但我想这对客户来说并不重要,所以我想这真的很好!脑洞大的东西!困惑和感兴趣,希望得到更多细节。

以上是关于等待 useLazyQuery 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-apollo 中等待多个 useLazyQuery

Apollo useLazyQuery 反复调用

Java 不等待异步调用响应

如何使用 Axios 和 Typescript 等待响应?

如果我等待我正在执行 ReadAsStringAsync() 的响应,我应该等待 ReadAsStringAsync() 吗?

使用 Callisto CustomDialog 等待响应