RxJs窗口:未获取最后一个可观察对象
我写了这段代码RxJs窗口:未获取最后一个可观察对象,rxjs,reactive-programming,Rxjs,Reactive Programming,我写了这段代码 timer(0, 100) .pipe( windowTime(1000), take(3), flatMap( value => value.pipe(toArray()))) 我不明白为什么在订阅中我只得到2个值。无论n取什么,我总是在订阅中获得n-1值 你能解释一下为什么吗 编辑:我怀疑有一个bug,所以我 有趣的问题 因此,windowTime(1000)将每隔1000毫秒发出一个新窗口。但窗户到底是什么?一个窗口是主题实例 wi
timer(0, 100)
.pipe(
windowTime(1000),
take(3),
flatMap( value => value.pipe(toArray())))
我不明白为什么在订阅中我只得到2个值。无论n
取什么,我总是在订阅中获得n-1
值
你能解释一下为什么吗
编辑:我怀疑有一个bug,所以我 有趣的问题
因此,windowTime(1000)
将每隔1000毫秒发出一个新窗口。但窗户到底是什么?一个窗口是主题
实例
windowTime
可以管理多个窗口,但当您仅提供其第一个参数(称为windowTimeSpan
)时,将只有一个活动窗口。这意味着在windowTimeSpan
ms通过后,当前窗口将关闭,并创建一个新窗口并推送到流中
当窗口关闭时,表示它将发送完整通知。这是一个非常重要的方面
订阅时,将立即创建一个窗口,并将其推送到流中。通过执行
flatMap(value=>value.pipe(toArray()))
,可以注册当前窗口(主题)的观察者。它在语义上与subject.pipe(toArray()).subscribe(subscriber)
为什么会这样?
定时器(01100)
.烟斗(
//每1000毫秒发出一个值(窗口),并关闭(完成)上一个值
窗口时间(1000),
以(3)为例,
flatMap(value=>value.pipe(toArray()))
)
首先,让我们看看flatMap
flatMap
与mergeMap
相同。mergeMap
所做的是管理内部可观察对象的数量(concurrent
,默认为INFINITY
)。正在跟踪一个内部可观察对象,直到它完成
toArray
在源代码完成之前积累值的作用是什么。在这种情况下,直到当前主题
(窗口)完成
。当窗口关闭时会发生这种情况,更具体地说,当1000ms
pass时
因此,如前所述,订阅时将立即创建一个窗口。
在0ms
之后输入一个值(0),在100ms
之后输入另一个值(1),依此类推,直到值9
输入。同时,toArray
收集所有这些值。因此9的到来也标志着1000ms
,也就是当前窗口将关闭的时间(将发出完整通知
)。发生这种情况时,toArray
将收到通知,并将收集的值发送给数据使用者
在此之后,将创建一个新窗口(第二个值为take(3)
)。然后,输入值10,然后输入值11,以此类推直到19,这标志着另一个1000ms
,这将导致当前窗口完成并创建一个新窗口。但是这个新窗口将代表take(3)
的第三个值。这意味着take
将从其来源取消订阅,并将发出完整的通知
因此,源将无法接收任何其他值,因此这应该可以解释为什么您只获得2个数组。有趣的问题
因此,windowTime(1000)
将每隔1000毫秒发出一个新窗口。但窗户到底是什么?一个窗口是主题
实例
windowTime
可以管理多个窗口,但当您仅提供其第一个参数(称为windowTimeSpan
)时,将只有一个活动窗口。这意味着在windowTimeSpan
ms通过后,当前窗口将关闭,并创建一个新窗口并推送到流中
当窗口关闭时,表示它将发送完整通知。这是一个非常重要的方面
订阅时,将立即创建一个窗口,并将其推送到流中。
通过执行flatMap(value=>value.pipe(toArray()))
,可以注册当前窗口(主题)的观察者。它在语义上与subject.pipe(toArray()).subscribe(subscriber)
为什么会这样?
定时器(01100)
.烟斗(
//每1000毫秒发出一个值(窗口),并关闭(完成)上一个值
窗口时间(1000),
以(3)为例,
flatMap(value=>value.pipe(toArray()))
)
首先,让我们看看flatMap
flatMap
与mergeMap
相同。mergeMap
所做的是管理内部可观察对象的数量(concurrent
,默认为INFINITY
)。正在跟踪一个内部可观察对象,直到它完成
toArray
在源代码完成之前积累值的作用是什么。在这种情况下,直到当前主题
(窗口)完成
。当窗口关闭时会发生这种情况,更具体地说,当1000ms
pass时
因此,如前所述,订阅时将立即创建一个窗口。
在0ms
之后输入一个值(0),在100ms
之后输入另一个值(1),依此类推,直到值9
输入。同时,toArray
收集所有这些值。因此9的到来也标志着1000ms
,也就是当前窗口将关闭的时间(将发出完整通知
)。发生这种情况时,toArray
将收到通知,并将收集的值发送给数据使用者
在此之后,将创建一个新窗口(第二个值为take(3)
)。然后,值为10