【发布时间】:2019-04-23 08:33:26
【问题描述】:
让我们考虑以下流:
Stream1: 1 2 3 4 5 6 7 8 9
Stream2: abc d fg h
我想通过组合这些流来获得输出:
[1, a]
[2, b]
[3, c]
[4, d]
[5, d]
[6, f]
[7, g]
[8, h]
[9, h]
示例代码创意: StackBlitz Editor Link
const input$ = fromEvent(document, 'keydown')
.pipe(
map((event: KeyboardEvent) => event.keyCode)
);
const source$ = interval(500).pipe(s$ => zip(s$, input$))
source$.subscribe(x => console.log(x));
所以这类似于运营商zip() 和/或withLatestForm(),但我想不出解决方案
- 主要想法是我有 500 毫秒的间隔,并且在每个滴答声上,我都想用 Keyboard Input Observable 压缩它,这可以按我的意愿工作,但只要我不发出 Keyboard Input Observable 一切都会停止。 我想继续发出间隔滴答声,但如果键盘事件停止,则采用最新值
【问题讨论】:
-
您问题开头的输出是否真的代表了您的用例?我完全不确定它确实如此。在这种情况下,您的问题中有两个问题。
-
我想我没有给出最好的描述。是的,它确实代表了我的情况。每当键盘输入的输入速度快于间隔滴答声时,我希望它们在某种程度上保存在内存中,以便在以后的滴答声到达时将它们匹配在一起,但是每当没有更多键盘输入时,我希望最新的键盘输入与滴答声匹配跨度>
-
请再次查看流,我编辑它们以更好地展示我的用例
-
我假设您希望有一个间隔来继续并从您输入的内容(键盘事件)中获取最新值。请看下面是您的 Stackblitz 的分支,我对其进行了修改以尝试回答您的问题。
-
我的帖子因信息不全,没有解决问题,被版主删除。但是,如果您仍然感兴趣 - here 是链接。修改最少,你需要的运算符是
combineLatest
标签: javascript typescript rxjs reactive-programming rxjs6