switchMap不会取消先前的HTTP调用

问题描述

一个由switchMap运算符创建的角度服务方法(http调用),因此,如果有新的到达,它可以拒绝/取消以前的其余API调用。它工作正常并且可以进行后端调用,但是它不会拒绝任何BE调用,但是会依次调用每个调用并等待所有BE调用进行响应,因此应该拒绝以前的调用

我在哪里做错了?

stackblitz example

要创建第一个观察者事件,我正在使用from()方法,每次键入它都会调用HTTP get API。

enter image description here

解决方法

那是因为您在每次按键时都调用updateSearch(),这意味着您要创建许多并行运行的链,而不是使单个链可以取消订阅switchMap的Observable:>

例如,您可以通过主题:

s = new Subject();

s.pipe(
  switchMap(y => {
    return this.http.get("https://jsonplaceholder.typicode.com/users").pipe(
      delay(2000),map(z => {
        return z;
      })
    );
  ));

updateSearch(value) {
  s.next(value);
}