RxJS: Как создать http подписку в промежутке с concatMap или switchMap? Какая разница? - PullRequest
1 голос
/ 04 апреля 2019

Я пытался следовать этому примеру stackblitz и документациям Observable , но мне это не помогло.Честно говоря, я новичок в RxJS и не совсем знаю, как заставить его работать с http и подписываться.Играя эту проблему так долго, мой мозг кашляет.По сути, я хочу subscribe проверять новые данные каждый интервал.Может быть, есть лучший способ, чем rxjs?

import { Component, OnDestroy, OnInit } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

import { Weather } from './interface';
import { Observable } from 'rxjs/Observable';

import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
import { Subject } from 'rxjs';

@Component({
  selector: 'app-weather',
  templateUrl: './weather.component.html',
  styleUrls: ['./weather.component.css']
})
export class WeatherComponent implements  OnInit {
  weathers: any;
  response: any;
  // t = Observable.interval(1000).take(5);
  // numbers = interval(1000);
  // takeFourNumbers = interval(50000).pipe(take(2));


  private serviceUrl = 'https://api.weather.gov/gridpoints/OKX/36,38/forecast';
  n = 10000;
  constructor(private http: HttpClient) {}

  ngOnInit() {

      this.response = this.http.get<Weather>(this.serviceUrl );
      this.response.subscribe(
        results => {
          this.weathers = results.properties.periods.slice(0, 2);

          // this.numbers.subscribe(x => console.log('Next: ', x));
        });
    }
}

1 Ответ

3 голосов
/ 04 апреля 2019

Вы можете использовать interval для излучения каждую секунду, а затем превратить каждую эмиссию в HTTP-запрос.

import { interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';

interval(1000).pipe(
  switchMap(() => this.http.get<Weather>(this.serviceUrl)),
).subscribe(result => {
  // ...
});

Возможно, вы захотите использовать concatMap вместо switchMap в зависимости от того, какое поведение вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...