黑菜菌 2019-12-24 23:36 采纳率: 0%
浏览 990

js多个异步函数为什么会同时执行?

图片说明

function fu() {

    setTimeout(() => {
        console.log(1)
    }, 2000)

    setTimeout(() => {
        console.log(2)
    }, 2000)

    setTimeout(() => {
        console.log(3)
    }, 2000)

    setTimeout(() => {
        console.log(4)
    }, 2000)

}

fu();

如图,js不是单线程的吗?为什么这几个命令会在两秒后同时输出?单线程不应该是每两秒输出一个吗?

  • 写回答

3条回答 默认 最新

  • 易烊千玺的女朋友 2019-12-27 11:38
    关注

    首先,当代码执行到第一个延时器时,延时器两秒后输出,

    这期间其他的代码执行顺序并不是等这这个延时器执行完再继续往下走

    而是将这个延时器放在异步队列里面,随之执行后面代码第二个延时器,继续将第二个延时器放入异步队列;

    继续往下执行代码,第三个延时器,以此类推,因为代码执行速度很快,放在异步队列中的延时器都是两秒,所以几乎是同时输出
    如果要一直等延时器结束,再执行下一步的话,博主可以研究一下async/await的用法

    望采纳

    评论

报告相同问题?

悬赏问题

  • ¥15 线程问题判断多次进入
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败