当前位置: 首页 > news >正文

鸿蒙之setTimeout问题

鸿蒙之setTimeout问题

      • 现象
      • 排查
        • 日志打印
        • 可能被取消的原因
      • 解决方式

现象

  setTimeout(() => {//延时后业务逻辑}, 500)

setTimeout箭头函数里面,延时后业务逻辑不执行,导致出现业务bug

排查

日志打印
hdc shell hilog -b d

使用上面日志开启debug开关,然后再搜索下日志“SetTimeoutInnerCore function call before libuv”和 “Timer has been successfully deleted.TimerID”

开启日志并打印,发现会执行Timer has been successfully deleted.TimerID,代表setTimeout被取消,打印TimerID,发现为0,为什么是0,由于场景比较特殊这个setTimeout是项目中第一个setTimeout,经确认TimerID是从0开始累加

可能被取消的原因
clearInterval()
clearTimeout()

发现有其他地方TimerID默认值不规范,例如初始化为0或者在最后清空时候未做判断,导致被取消

解决方式

过度方式在第一个setTimeout前在写一个,防止被其他地方误删除
setTimeout(()=>{},0)

建议方案在每一处clearInterval或者clearTimeout地方,需要判空处理
if (this.timerId) {
clearTimeout(this.timerId)
}


http://www.mrgr.cn/news/35675.html

相关文章:

  • 高级算法LLM大语言模型算法特训 带你转型AI大语言模型算法工程师
  • 大模型分布式训练并行技术(二)-数据并行
  • 最大似然估计,存在即合理
  • Vue+Tui-image-editor实现图片编辑(涂鸦,裁剪,标注,旋转,滤镜)
  • pdf.js滚动翻页的例子
  • 系统架构设计师教程 第9章 9.1 软件可靠性基本概念 笔记
  • 瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法
  • 详解BIOS
  • LeetCode题练习与总结:删除链表中的节点--237
  • 基于Jeecgboot3.6.3的flowable流程视图增加一个节点显示方式
  • 算法记录——树
  • python的while嵌套循环练习
  • 01DSP学习-了解DSP外设-以逆变器控制为例
  • Java后端中的复杂查询优化:索引设计与SQL调优的结合
  • 两张图讲透软件测试实验室认证技术体系与质量管理体系
  • P2415 集合求和
  • MATLAB中isa函数用法
  • C语言:编译,链接和预处理详解
  • mac 外接键盘
  • HBase DDL操作代码汇总(namespace+table CRUD操作)