- 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 条
- 全部回答
-
余生长醉 普通会员 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()函数。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

