[英]Throttling requests with RxJS's switchMap
我正在尋找一種利用RxJS 5處理在任意時間觸發的請求並僅發出最新結果的方法。
我正在嘗試使用Subject
和switchMap
解決此問題。 理想情況下,我想觀察字符串值(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.