javascript - 从 RxJs 5 迁移到 6:switchMap 和 Interval 损坏
问题描述
我很难理解 RxJs。我很难理解 5 到 6 之间的重大变化。
我有以下代码和以下问题。
- Observable 不再提供 .interval 方法
- .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));
解决方案
请参阅迁移文档中有关管道语法的部分,必须通过调用来调用运算符.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
,但这只是一个兼容层,您应该真正使用管道语法。
推荐阅读
- javascript - React:在 JSON 中传递函数
- python - 在 Pyomo 中使用 core.base 变量向 ConcreteModel 添加二次圆锥约束
- sql - 我在 Access SQL 代码中不断收到“语法错误 FROM 子句”
- css - CSS:如何全选
在 .class 内? - javascript - 组内的 FabricJs 对象缩放重新对齐组项而不是固定位置
- c++11 - 填写特定大小的文件 - 我将如何做到这一点
- ansible - 带有 include_tasks 的 Ansible Playbook
- javascript - 检查字符串是否可以转换为数字
- php - vscode中的所有白色文本?
- teradata - CST 中的 Teradata current_timestamp 显示为 GMT