- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里没什么太严肃的,只是好奇。
我想举个例子,想出了这段代码:
const { Observable, Subject } = Rx
const timeout$ = new Subject()
const obs$ = Observable
.of(1)
.takeUntil(timeout$)
.delay(2000)
.subscribe(x => console.log(x))
timeout$.next()
timeout$.complete()
我原以为这段代码不会显示console.log
,但它确实显示了。
有人能解释一下为什么吗?
这是错误还是我对 takeUntil
的理解不正确?
这是一个用于演示的 Plunkr https://plnkr.co/edit/wpKztBabnBeIuNZS28wu?p=info
最佳答案
请注意,如果您切换 takeUntil()
和 delay()
的顺序,它不会按预期发出:
Observable
.of(1)
.delay(2000)
.takeUntil(timeout$)
.subscribe(x => console.log(x));
你看到的是因为 delay()
在 takeUntil()
发送 complete
通知之前安排了发射。
现在在 RxJS 5.2.0 中,takeUntil()
运算符不会强制取消订阅它的源,这就是问题所在。因此,当 takeUntil()
被 timeout$
通知时,它仍然订阅了它的源 Observable,因此来自 delay()
的计划发射是'不处理。
注意在处理来自通知 Observable 的发射时没有 this.unsubscribe()
调用:https://github.com/ReactiveX/rxjs/blob/master/src/operator/takeUntil.ts#L61
还有其他运算符具有相同的行为。例如 first()
和 takeWhile()
。
另一方面,例如 take()
运算符取消订阅:
https://github.com/ReactiveX/rxjs/blob/master/src/operator/take.ts#L80
此行为实际上已被报告,现在正在讨论这是否是错误:
关于RxJs : Weird behavior with takeUntil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976902/
我想找到所有等于第一个7的项目: val list = List(1,4,5,2,3,5,5,7,8,9,2,7,4) 我的解决方案是: list.takeWhile(_ != 7) ::: List
我有一个服务调用,我每 5 秒检查它是否返回 true 或 false。 notifier(){ return Rx.Observable.of(true) // based on some c
来自 the docs for the TakeUntil operator (强调我的): The TakeUntil subscribes and begins mirroring the sou
向 TakeUntil 添加多个条件的最佳方法是什么?是否只是将 TakeUntil() 调用相互链接起来的问题? IObservable propertyToObserve = ... var ob
在下面的代码示例中,目的是通过向 Subject mid$ 发出 1 来阻止来自 second$ 的事件。 import { Subject, timer } from "rxjs"; import
我订阅了从 NgRx reducer 获取提供程序的订阅。我想用takeUntil()当最终返回一个包含内容的数组时自动关闭订阅: // Fetch providers this.store.pipe
这里没什么太严肃的,只是好奇。 我想举个例子,想出了这段代码: const { Observable, Subject } = Rx const timeout$ = new Subject() co
这里没什么太严肃的,只是好奇。 我想举个例子,想出了这段代码: const { Observable, Subject } = Rx const timeout$ = new Subject() co
我想根据两个条件停止可观察订阅: 时间(使用 import { timer } from 'rxjs/internal/observable/timer'; ) 或 执行状态(使用您将在下面看到的请求
我正在尝试在可观察对象上实现一个辅助方法,该方法返回一个新的可观察对象,在达到超时之前只发出值: implicit class ObservableOps[T](obs: Observable[T])
我想在触发 takeUntil 运算符时执行一个函数(在 ajaxObservable 之外)。 In this way被立即触发,因为我调用了 observer.complete(),但如果我不调用
以下代码定义了我想要的行为(有效)。仅当鼠标按下时才会触发 mousemove 事件。 Rx.Observable.fromEvent(window,"mouseup") .subscribe(
我想使用“takeUntil”运算符以声明式方式取消订阅。但这基本上是行不通的。无论如何我都可以看到控制台输出。 const unsubscribe = new Subject(); function
我有一个未知大小的用户列表。我想要的是查询 first 30 并更新 UI。然后我想通过以 100 为步长的偏移量来查询所有其他用户,直到我得到最后一批用户 - 我应该在这里使用 takeUntil
是否有可能在 takeUntil 运算符中发出满足条件的项目? 最佳答案 嗯,我不确定我是否理解你的问题。是这样的吗? @Test public void tesTakeUntil() { L
我有以下倒计时: userClick=new Subject() resetCountdown(){this.userClick.next()} setCountDown() { let co
因此,如果函数运行的时间足够长以触发在计时器上运行的 takeUntil 函数,我试图让 bool 值为真。 这是代码 start = this.http.get(environment.shocha
我在听 mousemove事件直到mouseup .我正在做 takeUntil . 我的代码: const onMouseMove = fromEvent(window, "mousemov
我有一个简单的 Rxjs 计时器,它会一直运行直到通知程序发出一些东西,直到这里非常基本。 enum TimerResult = { COMPLETE, ABORTED, SK
目前我正在使用 takeWhile (\x -> x /= 1 && x /= 89) l 从列表中获取最多为 1 或 89 的元素。但是,结果不包括这些标记值。 Haskell 是否有一个标准函数可
我是一名优秀的程序员,十分优秀!