javascript - RxJS takeUntil 在高阶 observable 之前
问题描述
我在takeUntil
高阶可观察之前使用运算符:
import { of, Subject, fromEvent, interval } from "rxjs";
import { takeUntil, mergeMap } from "rxjs/operators";
const subject = new Subject();
const source = fromEvent(document.querySelector("h1"), "click");
fromEvent(document.querySelector("p"), "click").subscribe(() => {
subject.next();
});
source
.pipe(
takeUntil(subject),
mergeMap(() => interval(1000))
)
.subscribe(x => console.log(x));
但是我们这段代码,我有内存泄漏,因为它没有取消订阅interval
. 我可以将它移动到链的末端,但这很容易出错。开发人员很容易犯这个错误。例如,有没有办法让它保持这样,并取消订阅interval
?
解决方案
作为管道的最新操作员,对于 write或任何其他操作员takeUntil
来说是正常的事情。mergeMap
当人们把它作为第一个运营商时,他们应该明白他们为什么这样做。
例如秒表中的 rxjs 示例takeUntil
不是最新的,因为它应该在中间以支持新的开始点击。
interval(1000).pipe(
skipUntil(this.start),
takeUntil(this.stop$),
repeat(),
);
你可以:
- 使用 ts-lint 检查rxjs-no-unsafe-takeuntil
- 使用诸如ngx-auto-unsubscribe 之类的库
- 在自述文件中为开发人员添加注释
- 使用代码审查
但是当然人们应该理解编写代码的目的:)
推荐阅读
- python - 分裂国家的地图绘制
- docker - Keycloak:集群模式分布式会话所有者不起作用
- pine-script - Pine Script V4 策略中缺少颜色选项
- xml - Powershell / XML 到 TXT / 在 select -expandproperty 的结果中添加字符
- hlsl - 如果语句未在所有路径上返回值
- firebase - 看起来您正在使用 Firebase JS SDK 的开发版本。拉拉维尔
- flutter - 扑动中Listview.builder索引内的RadioListTile
- python - 基于总和的排列,不限制排列的项目数
- javascript - Electron:将 IPC 消息从 React 发送到 Electron 主进程?
- microsoft-graph-api - 有没有办法使用 Graph Api 获取 Azure Active Directory 组设置?