微信小程序—setTimeOut定时器的问题及解决


Posted in Javascript onJuly 26, 2019

背景

实验室需要将项目的app搬到微信的小程序上,终于知道为什么程序员是手艺人了,只要有需求,就要想方设法去填充这种需求,去年是小程序的元年了可以说,去年冬天一个叫跳一跳的小程序游戏出现在我的微信中,当时就觉得腾讯是真的牛皮。一时间很多的软件小程序版相继出现,各大微信公众号也开始关联小程序。小程序相比于app,有着独特的优势,其中最大的就是没有ios和android平台之分,但是同时也有局限,你给我开发个小程序王者荣耀试试。

定时任务

微信小程序API中有两种定时任务

  • setInterval
  • setTimeOut

这两者都能实现定时任务,比如实现一个定时器,但是建议采用后者setTimeOut,理由是前者并不精确。详细请参考

https://www.zhihu.com/question/20479535

setTimeOut用法

不多说直接上:

var timerName = setTimeOut(function() {
	//循环代码
}, delay)

这里在循环代码处做我们需要循环处理的逻辑,delay是延迟的毫秒数,5秒 = 5 * 1000,timerName是返回的定时器名称,有什么用,因为要取消这个定时器就需要给需要给出取消的定时器名称

clearTimeOut(timerName)


我有一个需求是每五秒获取一次位置

startReportHeart() {
   var timerTem = setTimeout(function () {
     that.heartReport();
   }, app.globalConfig.heart_delay)
   // 保存定时器name
   that.setData({
     timer: timerTem
   })
 },

heartReport()就是获取位置信息,这样的效果是,只执行了一次。然后查看了一通资料,发现这个setTimeOut只是在delay毫秒之后执行代码,嗦嘎。

那如何才能循环执行呢?——>递归登场

好吧,我的递归就是(错误代码)

startReportHeart() {
   var timerTem = setTimeout(function () {
     that.heartReport();
   }, app.globalConfig.heart_delay)
   // 保存定时器name
    that.setData({
      timer: timerTem
   })
   })
   that.startReportHeart()
 },

好像没有毛病啊,自递归调用,嗯,没毛病,但是,,,,情况就是,瞬间出现了堆栈溢出。哈哈哈哈哈哈哈。。。。。。。
分析:

我在startReportHeart函数中开启了一个timer,5秒后开始执行,heartReport获取位置信息,此时直接递归调用自己,再开启一个timer,我的天,这么愚蠢的代码,是谁写的,没错就是我。手动捂脸。

在知道了原因之后,那么如何才能解决呢?我们需要5秒后在一次执行,对就是这个需求,那么自然就是在timer中调用自身啊。笨蛋。

正确代码:

startReportHeart() {
   var timerTem = setTimeout(function () {
     that.heartReport();
     that.startReportHeart()
   }, app.globalConfig.heart_delay)
   // 保存定时器name
   that.setData({
      timer: timerTem
   })
 },

就这样完美。

总结

有的时候,遇到的坑真的很想打自己一巴掌,但是解决坑的过程,并发现自己的愚蠢却是一件非常开心的事呢。这个过程也是十分的funning呢。

小程序开发刚开始一周时间,是的,一周上手,一点一点,现在越来越顺手,虽然写的东西比较low,但是再一次印证了那句话,只有实践才是最好的学习方式。不要找什么从入门到精通,你会发现,这些都会让你从入门到放弃。

,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值

Javascript 相关文章推荐
jQuery+PHP打造滑动开关效果
Dec 16 Javascript
js老生常谈之this,constructor ,prototype全面解析
Apr 05 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
返回函数的JavaScript函数
Jun 14 Javascript
Angular.js 实现数字转换汉字实例代码
Jul 14 Javascript
功能强大的Bootstrap使用手册(一)
Aug 02 Javascript
手把手搭建安装基于windows的Vue.js运行环境
Jun 12 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
vue+vant实现商品列表批量倒计时功能
Jan 13 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
Apr 24 Javascript
Vue是怎么渲染template内的标签内容的
Jun 05 Javascript
JS ES6异步解决方案
Apr 29 Javascript
layUI实现三级导航菜单效果
Jul 26 #Javascript
layui实现三级联动效果
Jul 26 #Javascript
layui实现三级导航菜单
Jul 26 #Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 #Javascript
详解nvm管理多版本node踩坑
Jul 26 #Javascript
layui自定义ajax左侧三级菜单
Jul 26 #Javascript
layui递归实现动态左侧菜单
Jul 26 #Javascript
You might like
德生PL990的分析评价
2021/03/02 无线电
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
JavaScript 原型链学习总结
2010/10/29 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
神经网络python源码分享
2017/12/15 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python实现PID算法及测试的例子
2019/08/08 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
django 多数据库及分库实现方式
2020/04/01 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
劳动之星获奖感言
2014/02/01 职场文书
继承公证书
2014/04/09 职场文书
党风廉政建设责任书
2014/04/14 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书