首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
宝塔
V2EX  ›  问与答

[rxjs] 怎么写一个流,让值来的时候,收集接下来一段时间的值然后发送。

  •  
  •   wly19960911 · 162 天前 · 519 次点击
    这是一个创建于 162 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在需要一个逻辑,当 subject 发出值之后,收集接下来 100ms 内发出的值,筛选之后再发送出去,如果使用 bufferTime 我感觉容易出现性能问题。定时器跑的太欢了,如果使用 take 就变成了下次就没结果了。

    我现在的实现特么用的是 睡眠排序,利用 delay 和 debounceTime 筛选出我最后要的结果。如果是正常的实现我想知道怎么做最好
    4 回复  |  直到 2019-06-11 11:42:16 +08:00
        1
    wly19960911   162 天前
    其实我的场景是 筛选出事件冒泡中更为重要的事件,比如 select 组件,open 的时候需要点击 document (或者 backdrop )的时候关闭,问题是原有的组件逻辑里面没用 backdrop,这就可以操作其他的组件,如果这个时候如果为了阻止 document 的事件触发只能用过滤或者阻止事件冒泡。

    因为原有组件逻辑问题我需要选择前者,但是过滤的时候我希望不是走过滤 document 而是收集所有被触发的事件来筛选更重要的事件....
        2
    wly19960911   162 天前
    结贴了,感觉我思路出问题了,这个过滤不应该交给中间的流来处理,我在 source 用局部变量控制下,过滤掉其他的事件就好...想法完全歪了
        3
    ookkxw   162 天前 via iPhone
    感觉你思路有问题吧,你这样设计把订阅方式变成了观察者方式,那还不如所有事件斗在一个队列里面处理,类似 react 盒合成事件
        4
    wly19960911   162 天前
    @ookkxw #3 嗯,想了下是思路的问题,我最后决定改成 filter 过滤,在执行不同事件的时候 tap 改变局部变量的值。这个时候就得开 filter 来过滤最重要的事件。

    let eventActionType; // action type
    merge(
    fromEvent(A).pipe(
    tap(() => eventActionType = A),
    ),
    fromEvent(B).pipe(
    filter(() => ....) // 根据 eventActionType 过滤
    tap(() => eventActionType = B),
    )
    fromEvent(C).pipe(
    filter(() => ....) // 根据 eventActionType 过滤
    tap(() => eventActionType = C),
    )
    ).pipe(
    tap(() => eventActionType = null),
    )
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1165 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 18:00 · PVG 02:00 · LAX 10:00 · JFK 13:00
    ♥ Do have faith in what you're doing.