首页 > 解决方案 > 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()这样也行不通。

标签: javascriptrxjsreactive-programming

解决方案


您甚至在创建onDestroy()链之前就调用takeUntil了。

当您最终调用printFoo()之前的排放量时,unsubscribe不会重新发射并且主题unsubscribe已经完成,因此takeUntil在这种情况下将永远不会完成链。


推荐阅读