猿问

RxJS模拟App退出功能,两秒内两次点击则退出

问题描述

使用RxJS来模拟App的连续两次点击退出功能 
使用了两种方法,都不是很满意,有没有更好的办法?

相关代码

方法一:使用bufferTime操作符
出现的问题是,bufferTime的缓冲时间不是以点击为起始,可能导致点击一次之后立刻发出值

click$.pipe(
  bufferTime(2000, null, 2),
  filter(v => v.length >= 2)
).subscribe(() => console.log('success'))

方法二: 使用concatMap处理点击事件,并给第一次点击做节流
出现的问题是,'succsss'之后在节流时间里无法响应点击事件

click$.pipe(
  throttleTime(2000),
  tap(() => console.log('one')),
  concatMap(() => click$.pipe(
    tap(() => console.log('two')),
    take(1),
    takeUntil(of(1).pipe(delay(2000)))
  ))
).subscribe(v => console.log('success'))

最终实现见楼下我的补充


慕容森
浏览 586回答 1
1回答

largeQ

最终实现:const btn = document.getElementById('btn')const click$ = fromEvent(btn, 'click')const trigger$ = click$.pipe(   exhaustMap(() => {    console.log('tap')    return merge(click$, timer(2000)).pipe(take(1))   }) )    click$.pipe(   buffer(trigger$),   filter(v => v.length > 1) ).subscribe(v => console.log(v))tap部分可以实现“再按一次退出”之类的提示
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答