簡體   English   中英

使用Angular HTTP Observable的輪詢API

[英]Poll API using Angular HTTP Observable

在我的組件html中,我正在使用asyncPipe訂閱此http服務。 該服務將json響應對象映射到類實例的數組。 這一切都很好,但是我希望http服務每隔幾秒鍾輪詢一次。 我已經嘗試了很多事情(例如間隔),但目前看來RXJS有點雷區。 有人使用Angular 6實現了這種事情嗎?

fetch(command, params?) {
    return this.http.post(`http://localhost:4000/${command}`, params)
      .pipe(
        map((data: Data) => {
          const statuses: Status[] = [];
          for (const statusKey of Object.keys(data.statuses)) {
            const newStatus = new Status(
               // do some object translation...
           );
           statuses.push(newStatus);
          }
        return statuses;
        })
      )
      .pipe(
        catchError(EpisodeApiService.handleError)
      );
  }

這應該像下面這樣簡單:

    pollInterval = 5000;
    const httpObservable = interval(pollInterval).pipe(
    switchMap(x => fetch(command, params?) )
   );

pollInterval可以根據要求進行更改。 intervalswitchMap應該如下導入:

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

在此處使用switchMap有助於取消任何延遲的未決http請求,這對於提高性能尤其是在間歇性Internet連接期間的性能switchMap 這就是為什么RxJS反應性方法比setInterval()等傳統方法更受青睞的原因。

最后還應該進行訂閱,否則將不會發生任何事情:

httpObservable.subscribe(x => {});

如果您不想使用rxjs,也可以這樣做

 setInterval(function(){
      serviceObj.httpObservable.subscribe(x => {});
    }, 10000)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM