useLazyQuery不在全部承诺中触发

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

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

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

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

Br

reactjs react-hooks react-apollo apollo-client
1个回答
1
投票

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

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

参见,对于钩子,在每个渲染器上返回一些数据更为自然。在一个渲染中,您有一些标志isLoading = true,在下一个渲染中,您有isLoading = false和一些非空data。如果您引入Promise,无论组件的渲染周期如何,都可以对其进行解析或拒绝,则情况会变得非常混乱。

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

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

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