如何在takeWhile中使用rxjs缓冲区

节点马里奥

我正在研究webrtc。该应用程序将icecandidates发送到后端Firestore服务器。问题在于,多次触发onicecandidate导致多次调用信令服务器。我想收集所有的候选人,并打一个电话到信令服务器。这个想法是缓冲所有事件,直到iceGathering完成。这下面的尝试不起作用

this.pc = new RTCPeerConnection(iceServers);
const source: Observable<any> =  fromEvent(this.pc, 'icecandidate');
const takeWhile$ = source
        .pipe(
            takeWhile(val=> val.currentTarget.iceGatheringState === 'gathering'
    ))
const buff = source.pipe(buffer(takeWhile$));
    buff.subscribe(() => {
        // this.pc.onicecandidate = onicecandidateCallback;
    })
巴拉特1226

方法1:

你快到了。

takeWhile$取值,发出他们,而条件得到满足。因此,在中buff,无论何时takeWhile$发出值,都会发出事件buff缓冲区icecandidate

因此,您只需在中发出一个值takeWhile$

因此,您需要的是takeLast()运算符仅发出最后一个值。

当您放入takeLast(1)in时takeWhile$,它仅发出最后一个值,而在in中buff,最后发出的值导致创建icecandidate事件缓冲区

this.pc = new RTCPeerConnection(iceServers);

const source: Observable<any> = fromEvent(this.pc, "icecandidate");

const takeWhile$ = source.pipe(
  takeWhile(val => val.currentTarget.iceGatheringState === "gathering"),
  takeLast(1)
);

const buff = source.pipe(buffer(takeWhile$));

buff.subscribe((bufferValues) => {

   // bufferValues has a buffer of icecandidate events

  // this.pc.onicecandidate = onicecandidateCallback;
});

icecandidatebufferValues上面的代码,您将可以访问订阅中事件缓冲区

方法2:

您还可以使用reduce运算符来实现相同的方案

this.pc = new RTCPeerConnection(iceServers);

const source: Observable<any> = fromEvent(this.pc, "icecandidate");

const takeWhile$ = source.pipe(
  takeWhile(val => val.currentTarget.iceGatheringState === "gathering"),
  reduce((acc, val) => [...acc,val], [])
);

takeWhile$.subscribe((bufferValues) => {

  // bufferValues has a buffer of icecandidate events

 // this.pc.onicecandidate = onicecandidateCallback;
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在小型缓冲区中使用Mx?

来自分类Dev

如何在 Angularjs 中使用 Nodejs 的缓冲区?

来自分类Dev

如何在函数中使用 HTMLIZE 并将本地缓冲区更改为 HTMLIZE 输出缓冲区?

来自分类Dev

在 Flex 中使用多个缓冲区时,如何避免令牌在缓冲区之间拆分

来自分类Dev

如何在asp.net vnext中使用协议缓冲区?

来自分类Dev

如何在node.js中使用.proto文件解码编码的协议缓冲区数据

来自分类Dev

如何在Tone.Player中使用音频缓冲区播放音调?

来自分类Dev

在Android AudioTrack中使用缓冲区

来自分类Dev

在Android AudioTrack中使用缓冲区

来自分类Dev

如何在JavaScript中使用google-protobuf使用“地图”对消息进行编码?(协议缓冲区)

来自分类Dev

如何在Java中使用“协议缓冲区”和“ protobuf-java-format”从XML创建对象

来自分类Dev

如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

来自分类Dev

如何在当前缓冲区旁边而不是最后打开vim缓冲区

来自分类Dev

在Emacs中使用下面的split-window-below。如何获得底部窗口的缓冲区?

来自分类Dev

如何使用PortAudio将交错的缓冲区解析为不同的多通道缓冲区

来自分类Dev

在pyspark中使用缓冲区收集RDD

来自分类Dev

是否可以在C中使用较大的char缓冲区

来自分类Dev

在C ++中使用缓冲区时的废纸characters字符

来自分类Dev

在Matcher类的appendReplaccement()方法中使用缓冲区对象

来自分类Dev

XNA 4.0.4在rendertarget中使用Z缓冲区

来自分类Dev

为什么在Java中使用协议缓冲区

来自分类Dev

在Bash中使用多个复制缓冲区

来自分类Dev

如何在Vim中替换整个缓冲区的内容

来自分类Dev

如何在Swift中附加协议缓冲区?

来自分类Dev

如何在单片机上处理GSM缓冲区?

来自分类Dev

如何在vim中浏览缓冲区?

来自分类Dev

缓冲区如何在Java IO中工作?

来自分类Dev

如何在Arcgis Android中获取Road的缓冲区?

来自分类Dev

如何在缓冲区中执行代码?

Related 相关文章

  1. 1

    如何在小型缓冲区中使用Mx?

  2. 2

    如何在 Angularjs 中使用 Nodejs 的缓冲区?

  3. 3

    如何在函数中使用 HTMLIZE 并将本地缓冲区更改为 HTMLIZE 输出缓冲区?

  4. 4

    在 Flex 中使用多个缓冲区时,如何避免令牌在缓冲区之间拆分

  5. 5

    如何在asp.net vnext中使用协议缓冲区?

  6. 6

    如何在node.js中使用.proto文件解码编码的协议缓冲区数据

  7. 7

    如何在Tone.Player中使用音频缓冲区播放音调?

  8. 8

    在Android AudioTrack中使用缓冲区

  9. 9

    在Android AudioTrack中使用缓冲区

  10. 10

    如何在JavaScript中使用google-protobuf使用“地图”对消息进行编码?(协议缓冲区)

  11. 11

    如何在Java中使用“协议缓冲区”和“ protobuf-java-format”从XML创建对象

  12. 12

    如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

  13. 13

    如何在当前缓冲区旁边而不是最后打开vim缓冲区

  14. 14

    在Emacs中使用下面的split-window-below。如何获得底部窗口的缓冲区?

  15. 15

    如何使用PortAudio将交错的缓冲区解析为不同的多通道缓冲区

  16. 16

    在pyspark中使用缓冲区收集RDD

  17. 17

    是否可以在C中使用较大的char缓冲区

  18. 18

    在C ++中使用缓冲区时的废纸characters字符

  19. 19

    在Matcher类的appendReplaccement()方法中使用缓冲区对象

  20. 20

    XNA 4.0.4在rendertarget中使用Z缓冲区

  21. 21

    为什么在Java中使用协议缓冲区

  22. 22

    在Bash中使用多个复制缓冲区

  23. 23

    如何在Vim中替换整个缓冲区的内容

  24. 24

    如何在Swift中附加协议缓冲区?

  25. 25

    如何在单片机上处理GSM缓冲区?

  26. 26

    如何在vim中浏览缓冲区?

  27. 27

    缓冲区如何在Java IO中工作?

  28. 28

    如何在Arcgis Android中获取Road的缓冲区?

  29. 29

    如何在缓冲区中执行代码?

热门标签

归档