javascript - RxJS takeUntil 不会取消订阅
问题描述
我想使用“takeUntil”运算符以声明式方式取消订阅。但这基本上是行不通的。无论如何,我可以看到控制台输出。
const unsubscribe = new Subject();
function printFoo() {
of('foo')
.pipe(takeUntil(unsubscribe))
.subscribe(console.log) // Why I can see 'foo' in the console?
}
function onDestroy() {
unsubscribe.next();
unsubscribe.complete();
}
onDestroy()
setTimeout(() => printFoo(), 200)
斯塔克闪电战:
https://stackblitz.com/edit/rxjs-svfkxg?file=index.ts
PS我预计即使unsubscribe.next()
取消订阅也足够了,但即使unsubscribe.complete()
这样也行不通。
解决方案
您甚至在创建onDestroy()
链之前就调用takeUntil
了。
当您最终调用printFoo()
之前的排放量时,unsubscribe
不会重新发射并且主题unsubscribe
已经完成,因此takeUntil
在这种情况下将永远不会完成链。
推荐阅读
- matlab - 多个 addpath 命令导致第二次调用缓慢
- angular - sweetalert_1.default 不是函数:Angular 5
- drupal - 用于 drupal 部署的 httpd.conf
- python - 当我运行我的测试套件时,我得到一个 TypeError 我无法理解为什么
- node.js - 在端口 80 上运行节点 js,而不以 root 身份运行
- javascript - 为什么双引号 PHP 回显字符串中的双斜杠注释会产生 JS 错误?
- java - Java ora-01830 日期格式图片在转换整个输入字符串之前结束 Timestamp SQL
- python - Python中的加法函数没有按预期工作
- r - 更改两轴图 Y 的比例 - ggplot2
- excel - Excel VBA 保存对话框运行时错误 1001