为什么switchMap不会取消以前的观察者?

时间:2018-12-04 18:42:00

标签: angular rxjs rxjs5

我在组件(控制器)中描述了方法:

public requestPassportData(): void {
    const th = this;
    const data = {
      get_scanned_data: true
    };

    Observable.timer(0, 1000)
      .switchMap(() => this.requestMethods.requestPassportData(data))
      .takeWhile(() => {
        return (
          th.formRegister.currentForm().index == 1 ||
          th.formRegister.currentForm().index == 2 ||
          th.formRegister.currentForm().index == 3
        );
      })
      .subscribe(response => {});
}

如果要调用方法requestPassportData()五次,它将每秒钟发送五个请求到服务器。为什么switchMap不会取消最后一个观察者?

1 个答案:

答案 0 :(得分:4)

因为每次调用<FilesMatch "wp-login\.php|wp-admin\.php|wp-install\.php|update\.php"> Order Deny,Allow Deny from all Allow from XX.XX.XXX.XXX </FilesMatch> 时,您都会使用新的requestPassportData()创建一个新链,该链与先前的呼叫无关。

显然有多种方法可以解决此问题,但是您可以例如执行以下操作:

Observable.timer

实际实施取决于您要真正实现的目标,但希望您能明白与现在有什么不同。