如何在有角阿波罗客户端中停止轮询?

时间:2019-08-08 07:03:52

标签: angular polling apollo-client

我有一个仪表板预览页面,在该页面上,各种视觉效果均使用graphql查询获取其数据。我在查询选项中启用了轮询功能,以继续轮询任何数据更改并在预览中进行更新。到目前为止,一切都按预期进行。

问题在于,当我更改路由时(例如,我返回到管理页面),graphql轮询不会停止。从apollo client的angular文档中,我找不到任何可以停止对路线更改进行轮询的信息。关于apollo的react客户端停止轮询here的细节,但我无法理解。

如果有人能告诉我如何停止graphql角度轮询,那将很棒。

如果需要任何其他详细信息,请告知我。

1 个答案:

答案 0 :(得分:0)

这可能为时已晚,无法帮助原始海报,但这就是我要做的。希望它可以帮助其他人。这是针对Angular 8的,因此对于早期版本可能有所不同。

apollo.watchquery(....)返回QueryRef实例。此QueryRef实例上的valueChanges属性返回我们在视图中使用的查询数据。将返回的QueryRef实例存储在您的组件或服务中。然后通过路由导航过程中调用的Angular组件生命周期挂钩之一对其调用stopPolling()-可能使用ngOnDestroy。我不需要停止对导航的轮询,但是当查询显示“稳定”状态表示它已“完成”并且将来不会更改时。

在我的应用程序中,我有一个运行graphql查询的Angular服务类。在查询调用中,我有如下代码:

this.my_qRef = this.apollo.watchQuery<any>({
    query: MY_QUERY,
    variables: {
      MY_VARIABLEs: my_variables
    },
    pollInterval: 1000
})
return this.my_qRef.valueChanges

然后,该服务还公开了一个stopPolling方法,例如:

stopStatusPolling() {
  this.my_qRef.stopPolling()
}

由于视图组件将服务实例作为私有数据成员,因此只要满足正确的条件(例如,从组件离开导航时),就可以在其上调用stopStatusPolling方法-在ngOnDestroy()方法/ lifecycle-钩子(或在轮询查询结果“稳定”且预期不会更改时)。