[rxjs] 怎么写一个流,让值来的时候,收集接下来一段时间的值然后发送。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wly19960911
V2EX    问与答

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

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

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

    因为原有组件逻辑问题我需要选择前者,但是过滤的时候我希望不是走过滤 document 而是收集所有被触发的事件来筛选更重要的事件....
    wly19960911
        2
    wly19960911  
    OP
       2019-06-11 11:27:30 +08:00
    结贴了,感觉我思路出问题了,这个过滤不应该交给中间的流来处理,我在 source 用局部变量控制下,过滤掉其他的事件就好...想法完全歪了
    ookkxw
        3
    ookkxw  
       2019-06-11 11:33:09 +08:00 via iPhone
    感觉你思路有问题吧,你这样设计把订阅方式变成了观察者方式,那还不如所有事件斗在一个队列里面处理,类似 react 盒合成事件
    wly19960911
        4
    wly19960911  
    OP
       2019-06-11 11:42:16 +08:00
    @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),
    )
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5221 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 09:21 PVG 17:21 LAX 02:21 JFK 05:21
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86