代码之家  ›  专栏  ›  技术社区  ›  Selenir

使用RxJS的switchMap限制请求

  •  2
  • Selenir  · 技术社区  · 6 年前

    我正在寻找一种利用RxJS 5处理在任意时间内发出的请求并只发出最新结果的方法。

    Subject switchMap . 理想情况下,我希望观察字符串值(url)并发出响应。如果在收到任何以前的响应之前观察到新的url,那么应该忘记(或取消-我相信这个url实际上是在 切换图 ).

    我成功地生成了以下代码:

    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');
    

    切换图 控制台输出应该只显示上次请求的结果。相反,它显示了我传递给 stream$ . 我做错什么了?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Bogdan Savluk    6 年前

    您的代码可以重写如下:

    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');
    

    next 方法,可能是实现细节。

    要使其正常工作,请将url推入 subject 变量