首页 > 解决方案 > 从 RxJs 5 迁移到 6:switchMap 和 Interval 损坏

问题描述

我很难理解 RxJs。我很难理解 5 到 6 之间的重大变化。

我有以下代码和以下问题。

  1. Observable 不再提供 .interval 方法
  2. .switchMap 方法不再可用于 .interval

我检查了更改日志和修复重大更改的建议,但我无法弄清楚我需要做什么。我理解它的方式是,我拥有的代码很旧并且不使用管道运算符,但这就是我能够弄清楚的全部。

let polling = Observable.interval(2000)
.switchMap(() => this.http.get(this.videoStatusURL + this.taskID))
.subscribe(
  (data) => {              
    if (data["state"] === "SUCCESS") {
      //get final video here
      console.log("polling succeeded");
      this.downloadFinalVideo();
      polling.unsubscribe();
    }            
  },
  error => this.handleError(error));

标签: javascriptrxjsrxjs5angular6rxjs6

解决方案


请参阅迁移文档中有关管道语法的部分,必须通过调用来调用运算符.pipe(),因此您需要执行类似的操作

import { interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';

let polling = interval(2000)
.pipe(switchMap(() => this.http.get(this.videoStatusURL + this.taskID)))
.subscribe(
  (data) => {              
    if (data["state"] === "SUCCESS") {
      //get final video here
      console.log("polling succeeded");
      this.downloadFinalVideo();
      polling.unsubscribe();
    }            
  },
  error => this.handleError(error));

或者,您可以安装rxjs-compat,但这只是一个兼容层,您应该真正使用管道语法。


推荐阅读