【问题标题】:Angular 6 - How to use Angular's httpClient to see changes in the URI dataAngular 6 - 如何使用 Angular 的 httpClient 查看 URI 数据的变化
【发布时间】:2018-06-25 16:35:25
【问题描述】:

所以我正在尝试做某事,但感觉我错过了一条信息。我正在使用 Angular 6 httpClient 从 URI 获取数据。我可以很好地获取一次数据,但是如果不发出多个获取请求和多个订阅,URI 中的任何更改都不会更新。我想知道这段代码应该如何监控 URI 的变化。

let test = '';

getTestData(uriString) {
    return this.httpClient.get(uriString)
        .map((data) => {
            return data;
        });
}

this.getTestData('api/test')
    .subscribe(
        (info: any) => {
            this.test = info.result;
        },
        (error) => {
            console.log(error);
        }
    );

我想我的问题是:

  • httpclient.get 方法是否与该 uriString 建立连接 可以监控(所以如果 'api/test' 中的值发生变化,我可以 在不发出另一个获取请求的情况下看到这些更改?)
  • 如果不是这种情况,要持续监控对 URI 的更改,我是否需要一遍又一遍地调用“getTestData”方法来查看所做的任何更改(例如在 setInterval 中)?我认为 subscribe 方法应该会看到变化,但到目前为止它并没有那样工作。

对此的任何澄清/帮助将不胜感激。谢谢。

【问题讨论】:

  • httpClient 在收到响应后完成。这意味着您需要再次致电get。如果您需要持续监控数据更改,您可能需要 websockets 或类似的东西。
  • 首先,参数在 JavaScript/TypeScript 中按值传递。 S' 方法不可能知道作为参数传递的值已经改变。不,您不需要像 setInterval 那样一次又一次地发出请求。更改 URI 时需要发出新请求。这不会自行发生。如果通过“更改 URI”,您实际上并不是这个意思,而是指“当对相同 URI 的请求返回的值发生变化时”,那么如果不发出新请求,就无法知道这一点。

标签: angular httpclient angular6


【解决方案1】:

使用上述代码,您只需调用一次后端 API,然后等待 HTTP 响应完成并在您的订阅中处理结果。 observables 之后完成。

你有两种选择:

要么使用另一个 RXJS 观察者创建函数来触发对 API 的多次调用(例如 ìnterval),要么在客户端和服务器上实现 WebSockets,这将启用从服务器向客户端“推送”数据关于变化。

间隔的一个例子是:

timeInterval(1000).pipe(switchMap(() => this.httpClient.get(uriString)))

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 2021-08-16
    • 2019-06-04
    • 2018-12-29
    • 2018-10-18
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多