簡體   English   中英

使用RxJS的switchMap限制請求

[英]Throttling requests with RxJS's switchMap

我正在尋找一種利用RxJS 5處理在任意時間觸發的請求並僅發出最新結果的方法。

我正在嘗試使用SubjectswitchMap解決此問題。 理想情況下,我想觀察字符串值(URL)並發出響應。 如果在接收到任何先前的響應之前觀察到新的url,則應將其忘記(或取消-我相信這個實際上是在switchMap實現的)。

我設法產生了以下代碼:

const stream$ = new Rx.Subject()
  .switchMap(url => Rx.Observable.fromPromise(
    fetch(url).then(res => res.json())
  ))
  .subscribe(res => console.log(res));

stream$.next('https://some-api-server.com/1');
stream$.next('https://some-api-server.com/2');
stream$.next('https://some-api-server.com/3');

據我對switchMap的了解,控制台輸出應僅顯示上次請求的結果。 相反,它顯示了我傳遞給stream$的網址。 我怎么了?

您的代碼可以重寫如下:

const subject = new Rx.Subject();
const stream$ = subject
  .switchMap(url => Rx.Observable.fromPromise(
    fetch(url).then(res => res.json())
  ));


const subscription = stream$.subscribe(res => console.log(res));

subscription.next('https://some-api-server.com/1');
subscription.next('https://some-api-server.com/2');
subscription.next('https://some-api-server.com/3');

而且,正如您所看到的,您正在將URL推送到訂閱中,而不是主題中……不確定為什么要使用next方法,也許是實現細節。

為了使其正常工作-將網址推入subject變量

暫無
暫無

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

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