useLazyQuery未在Promise all中触发

时间:2019-10-07 07:35:41

标签: reactjs react-hooks react-apollo apollo-client

我正在尝试从阿波罗服务器重新获取数据,但无法使其正常工作。 我做了两个突变,并将它们推入阵列。 然后,我想在他们结束时,获取数据并重新填充图形。

    Promise.all(promises)
    .then(result => {
      console.log(result)
      console.log(id)
      return getGraph({
        variables: {
          id: id
        },
        fetchPolicy: 'network-only'
      });
    })
    .catch();

我可以看到它记录了结果和正确的ID。还更改为仅网络,因此它不会在缓存中查找。 关于可能出什么问题的任何建议吗?

Br

1 个答案:

答案 0 :(得分:1)

我假设getGraph是提取程序-useLazyQuery返回的回调。

不幸的是,它不会返回Promise,而是返回void(根据Apollo docs)。 GitHub上有existing issue,但我不确定是否会实现。

请参阅,对于钩子,在每个渲染器上返回一些数据更为自然。在一个渲染中,您有一些标志isLoading = true,在下一个渲染中,您得到了isLoading = false和一些非空的data。如果引入Promise,无论组件的呈现周期如何,都可以解决或拒绝该问题,那么事情就会变得非常混乱。

如果您不喜欢这种方法(或者确实需要与其他注释同步一些查询),则可以在通过query访问的client上运行ApolloConsumer

[UPD]正如@Jedi Schmedi在评论中所写,fetcher实际上返回Promise,但在^3.1.2的较新版本(apollo)中。因此,这可能是一种解决方法,尽管我不确定该API是否稳定并且可以更改,或者文档是否具有误导性。