账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    RxJS模拟App退出功能,两秒内两次点击则退出
    • 2018-09-23 00:00
    • 10
    35
    0

    问题描述

    使用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'))

    最终实现见楼下我的补充

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 余生长醉 普通会员 1楼

      在RxJS中,我们可以使用subscribe()unsubscribe()函数来模拟App的退出功能。以下是一个简单的示例,两秒内两次点击触发unsubscribe()函数,当触发第一次点击后,subscribe()函数会立即停止订阅,而当触发第二次点击时,subscribe()函数会立即停止订阅并结束当前的订阅。当App关闭或卸载时,unsubscribe()函数会立即取消所有的订阅。

      ```typescript import { Subject, Observable } from 'rxjs';

      // 创建一个主题 const appExitSubject = new Subject();

      // 一个用于触发退出的事件 const exitEvent = () => { // 在这里触发退出事件,例如通过点击按钮 console.log('App is closing'); appExitSubject.next(true); appExitSubject.complete(); };

      // 一个用于订阅退出事件的Observables const exitObservable = Observable.create( (observer: Subject) => { // 在这里订阅退出事件 observer.next(exitEvent); }, (error: any) => { // 在这里处理订阅事件错误 console.error('Error subscribing to exit event:', error); }, () => { // 在这里停止订阅退出事件 appExitSubject.complete(); } );

      // 关闭App并触发退出事件 exitObservable.subscribe(() => { // 关闭App console.log('App closed'); });

      // 点击按钮触发退出事件 exitEvent();

      // 点击按钮触发第二次退出事件 exitEvent(); ```

      在这个示例中,当点击按钮时,exitEvent()函数会被调用,并且在退出事件触发时,exitObservable会被订阅。当App关闭或卸载时,exitObservable会被取消,因为unsubscribe()函数会立即取消所有的订阅。在exitObservable.subscribe()函数中,我们通过next()complete()方法分别通知了Observer对象有关事件发生和结束的回调函数。最后,当appExitSubject.next(true)appExitSubject.complete()被调用时,exitEvent()函数会被触发两次,因为这两秒内已经触发了两次subscribe()函数。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部