在onBackPress中实现退出拦截时不生效
现象描述
在快应用中弹出一个弹窗,期望效果是该弹窗在用户确认后再退出,但是使用onbackpress控制确认弹窗后自动退出不生效。
问题分析
快应用引擎实现机制决定了onbackpress不能有耗时的操作。当超过一段时间后,如果代码还没有处理完,就会按返回值为false处理,即默认关闭该页面。问题代码中通过$watch监听showResult的变化,若变化则执行fetch操作,而这些操作可能还没执行完,从而导致弹窗自动关闭。
问题代码如下:
1. onBackPress() {
2. console.log("main onBackPress. status = " + this.showResult);
3. if (this.showResult) {
4. this.$element('textarea').focus({ focus: false });
5. this.content = '';
6. this.touchedIndex = -1;
7. //解决因监听showResult变化后的事件处理过缓问题,导致系统返回键有时失效
8. this.showResult = false;
9. return true;10. }
11. return false;
12. },
13. initDataWatchConfig() {
14. let that = this;
15. this.$watch('showResult', (newV, oldv) => {
16. if (!that.showResult) {
17. audio.stop();
18. this.getphoto()//此处是一个比较耗时的操作,以fetch举例,只有清除数据后第一次打开可以复现
19. }
20. });
21. },
22. getphoto: function () {
23. var that = this
24. fetch.fetch({
25. url: '
26. success: function (ret) {
27. },
28. fail: function (msg, code) {
29. }
30. })}
解决方法
给耗时比较长的操作增加延时。为this.showResult = false增加一个延时,优化后的代码如下:
1. onBackPress() {
2. console.log("main onBackPress. status = " + this.showResult);
3. if (this.showResult) {
4. this.$element('textarea').focus({ focus: false });
5. this.content = '';
6. this.touchedIndex = -1;
7. //增加延时,解决因监听showResult变化后的事件处理过缓问题,导致系统返回键有时失效
8. setTimeout(() => {
9. this.showResult=false;
10. }, 800);
11. return true;
12. }
13. return false;
14. }
原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0204411119222660356?fid=18
原作者:Mayism
在onBackPress中实现退出拦截时不生效的更多相关文章
- SpringMVC 中的Interceptor 拦截器
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...
- SpringMVC之七:SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- Spring中的Interceptor 拦截器 专题
spring-webmvc-4.3.14.RELEASE.jar org.springframework.web.servlet.DispatcherServlet#doDispatch /** * ...
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- Spring MVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...
- SpringMVC中的Interceptor拦截器及与Filter区别
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- url中传递中文参数时的转码与解码
URL传递中文参数时的几种处理方式,总结如下: 1.将字符串转码:newString(“xxxxx”.getBytes("iso-8859-1"),"utf-8" ...
- [转]SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
随机推荐
- 7.PowerShell DSC之模式
DSC两种模式 DSC有两种模式,Push模式和Pull模式 Push模式 基本流程 写配置--编译生成mof--推送到目标服务器,由目标服务器LCM执行mof并进行指定的配置 优点 架构简单.成本低 ...
- conda 命令笔记
1.虚拟环境 conda -V # 查看当前conda 版本 conda update conda # 更新conda conda env list 查看当前已有的虚拟环境 conda create ...
- K8S(06)web管理方式-dashboard
K8S的web管理方式-dashboard 目录 K8S的web管理方式-dashboard 1 部署dashboard 1.1 获取dashboard镜像 1.1.1 获取1.8.3版本的dsash ...
- codeforce 849B
B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- spring-cloud-netflix-hystrix-turbine
Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数 ...
- HDU 3681 Prison Break(状压DP + BFS)题解
题意:一张图,F是起点,Y是必须要到的点,D不能走,G可以充电.可以往四个方向走,每走一步花费一个电,走到G可以选择充满电或者不充,每个G只能充一次.问你走遍Y的最小初始点亮.number(G) + ...
- PHP7.1后webshell免杀
严格的D盾 D盾说,我是个严格的人,看到eval我就报木马,"看着像"="就是"木马,宁可错杀一千,绝不放过一个.好了,多说无益,一起看看严格的D盾是如何错杀的 ...
- 基金术语 All In One
基金术语 All In One GP.LP.PE.VC.FOF LP 有限合伙人(Limited Partner, LP):我们可以简单的理解为出资人. 很多时候,一个项目需要投资上千万乃至数个亿的资 ...
- 加密算法大全图解 :密码体系,对称加密算法,非对称加密算法,消息摘要, Base64,数字签名,RSA,DES,MD5,AES,SHA,ElGamal,
1. 加密算法大全: ***************************************************************************************** ...
- Introduction to JavaScript Source Maps
下载jquery时候发现:jquery.min.map 这什么鬼呀? https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/core.js http ...