angular - 如何通过间隔运算符发送请求?

标签 angular http rxjs

我尝试发送 http 请求。我使用 angular 2 和 rxjs 库。我需要发送一个时长为 5 秒的请求。

首先我导入运算符并按照以下方式使用它:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
// import { interval } from 'rxjs/observable/interval';
import 'rxjs/add/observable/interval';

@Injectable()
export class TasksService {
  constructor(private http: HttpClient) { };
  getUserTasks(userId): Observable<any> {
    return this.http.interval(5000).get('http://127.0.0.1:8000/app_tasks/user_tasks?user_id=' + userId);
  };
}

其次我在组件中订阅:

ngOnInit() {
  let userId = 1;
  this.getUserTasks(userId);
}

private getUserTasks(userId): void {  
  this.tasksService.getUserTasks(userId).subscribe(
    data => {   
      this.userTasks = JSON.parse(data);                 
      console.log('userTasks', this.userTasks);
    }
  )
};

但是控制台显示如下错误信息:

ERROR in src/app/services/tasks.service.ts(16,21): error TS2339: Property 'interval' does not exist on type 'HttpClient'.

最佳答案

Interval 是 Observable 的创建者函数,而不是 HttpClient。我会尝试以下操作:

Observable.interval(5000)
  .switchMap(_ => this.http.get('http://127.0.0.1:8000/app_tasks/user_tasks?user_id=' + userId)

通过使用 .switchMap,如果在您之前的请求返回之前达到新的间隔(5 秒,希望不会发生),您将放弃之前的 http.get 结果。

关于angular - 如何通过间隔运算符发送请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47769373/

相关文章:

javascript - 如何组合两个返回 Rx Observables 的相似 http 请求?

javascript - Rxjs 阻止订阅中的订阅

javascript - 如何在 Angular 2 中使用 URLSearchParams?

php - 如何使用 php 查找特定 IP 中的 HTTP 进程总数?

angular - 如何获取 mat-form-field 内输入的点击事件?

angular - 我怎样才能获得 ngx-mask 掩码值?

php - 带有 GET 参数(或同等参数)的电子邮件地址

javascript - 可观察中的数据集未在模板中更新

node.js - 服务命令需要在 Angular 项目中运行,但找不到项目定义

javascript - Angular 7/1.x 混合应用程序可以支持 HMR 吗?