我想使用“ 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)
StaackBlitz:
https://stackblitz.com/edit/rxjs-svfkxg?file=index.ts
附言我期望即使
unsubscribe.next()
也足以取消订阅,但是即使使用unsubscribe.complete()
也无法正常工作。 最佳答案
您甚至在创建带有onDestroy()
的链之前调用takeUntil
。
当您最终调用printFoo()
时,不会再次排放到unsubscribe
的排放,而且主题unsubscribe
已经完成,因此在这种情况下takeUntil
将永远不会完成链。