useLazyQuery 未在 Promise all 中触发

useLazyQuery not firing in Promise all

我正在尝试从 apollo 服务器重新获取数据,但无法正常工作。 我做了两个突变并将它们推入一个数组。 然后我想,当他们发现时,获取数据并重新填充图表。

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

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

Br

我假设 getGraph 是提取器 - 回调 return 由 useLazyQuery 编辑。

不幸的是,它不是 return Promise,而是 returns void(根据 Github 中的 Apollo docs). There is existing issue,但我'我不确定是否会实施。

看,对于钩子来说,return 在每个渲染器上添加一些数据更为自然。在一个渲染中,您有一些标志 isLoading = true,在下一个渲染中,您将获得 isLoading = false 和一些非空 data。如果您引入 Promise 可以解决或拒绝而不管组件的渲染周期,事情就会变得非常混乱。

如果您不喜欢这种方法(或者确实需要将某些查询与另一个查询同步)作为解决方法,您可以 运行 query on client accessed through ApolloConsumer

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