HarmonyOS 鸿蒙Next 为什么setTimeout的第一个console.log大概率出现不打印的现象

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 为什么setTimeout的第一个console.log大概率出现不打印的现象

let action = () => {
console.log("--------开始-------------------------")
setTimeout(() => {
console.log(‘打印1’);
console.log(‘打印2’);
console.log(‘打印3’);
}, 1000)
}

action()

打印结果

11-19 10:17:38.402   22216-23968   A0c0d0/JSAPP                                          I     --------开始-------------------------

11-19 10:17:39.414   22216-23968   A0c0d0/JSAPP                                          I     打印2

11-19 10:17:39.414   22216-23968   A0c0d0/JSAPP                                          I     打印3

打印1 并没有被输出

连续执行2次的 才打印出来

cke_10555.png

let action = () => {
console.log("--------开始-------------------------")
setTimeout(() => {
console.log(‘打印1’);
console.log(‘打印2’);
console.log(‘打印3’);
}, 1000)
}

action()
action()

打印结果

11-19 10:19:45.744   29728-33116   A0c0d0/JSAPP                                          I     --------开始-------------------------

11-19 10:19:45.744   29728-33116   A0c0d0/JSAPP                                          I     --------开始-------------------------

11-19 10:19:46.759   29728-33116   A0c0d0/JSAPP                                          I     打印2

11-19 10:19:46.759   29728-33116   A0c0d0/JSAPP                                          I     打印3

11-19 10:19:46.759   29728-33116   A0c0d0/JSAPP                                          I     打印1

11-19 10:19:46.759   29728-33116   A0c0d0/JSAPP                                          I     打印2

11-19 10:19:46.759   29728-33116   A0c0d0/JSAPP                                          I     打印3

打印1 只有在第二次执行的时候输出。

较大概率出现以上现象。

使用的DevEco Studio 版本为5.0.5.200

3 回复

已解决

重启电脑后,问题不在了。

也可以考虑升级下IDE版本啦

HarmonyOS 鸿蒙Next 中 setTimeout 的第一个 console.log 大概率不打印的现象,通常与事件循环和异步任务调度有关。在 JavaScript 或类似的基于事件循环的语言中,setTimeout 会将回调函数放入异步任务队列,等待当前执行栈清空及微任务队列执行完毕后才执行。

可能的原因包括:

  1. 执行栈未清空:如果 setTimeout 前的代码执行时间较长,或者包含大量同步任务,可能会延迟异步任务的执行。

  2. 微任务干扰Promise 的回调等微任务会优先于 setTimeout 回调执行。如果存在大量微任务,setTimeout 的回调可能会被推迟。

  3. 系统资源限制:在某些情况下,系统资源或任务调度策略可能导致 setTimeout 回调的执行被延迟或跳过。

  4. 代码错误:检查 setTimeout 调用前后是否有代码错误,如未捕获的异常,可能导致后续代码不执行。

为排查此问题,可以尝试:

  • 确保 setTimeout 前后的代码没有长时间运行或阻塞。
  • 检查是否有大量微任务干扰。
  • 简化代码,逐步排查问题所在。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部