文档章节

setTimeout在普通任务后面执行

耗子315
 耗子315
发布于 2015/01/06 10:50
字数 292
阅读 14
收藏 0
实验证明,setTimeout任务永远在普通任务后面执行,当执行一个较为久的任务时可以将其放入到setTimeout()中,让其延后执行
function a(){
    setTimeout(function(){
      alert("定时器任务");
    },0);
    sleep(5000);
    alert("普通任务");
}
a();
function sleep(ms) {
    var start = new Date();
    while (new Date() - start <= ms) {}
}


下面更加助于理解的一个例子:

function a(){
    setTimeout(function(){
      console.log("定时器任务2"+ new Date());
    },10000);
    setTimeout(function(){
      console.log("定时器任务1"+ new Date());
    },5000);
    console.log("start "+ new Date());
    sleep(5000);
    console.log("普通任务"+ new Date());
  }
  a();
  function sleep(ms) {
    var start = new Date();
    while (new Date() - start <= ms) {}
  }

结果如下:




换一下顺序:

function a(){
    setTimeout(function(){
      console.log("定时器任务1"+ new Date());
    },5000);
    console.log("start "+ new Date());
    sleep(5000);
    console.log("普通任务"+ new Date());
    setTimeout(function(){
      console.log("定时器任务2"+ new Date());
    },10000);
  }
  a();
  function sleep(ms) {
    var start = new Date();
    while (new Date() - start <= ms) {}
  }

结果为:



这就好理解了,程序还是按顺序执行的,只不过遇到setTimeout时,等待设定的时间后,看队列中有没有在执行的任务,如果没有,则加入队列,并执行,如果有,则等待队列中的任务执行完了在加入执行。



本文转载自:http://blog.csdn.net/haozi3156666/article/details/40370989

耗子315
粉丝 0
博文 18
码字总数 0
作品 0
桂林
程序员
私信 提问
setTimeout&Promise&Async直接的爱恨情仇

setTimeout 一、setTimeout 初现 语法: 参数 描述 code/function 必需。要调用一个代码串,也可以是一个函数 milliseconds 可选。执行或调用 code/function 需要等待的时间,以毫秒计。默认...

Sandop
2018/11/28
0
0
神奇的setTimeout(fn,0)

问题场景 最近在用layui写一个小项目,用到了layui的table组件,并且对某一列设置了可编辑属性,如下图,鼠标点击单元格的时候,就可以进行编辑了 image.png UI很漂亮,但是因为这是一个财务...

我要活出个人模狗样
2017/11/22
0
0
8张图让你一步步看清 async/await 和 promise 的执行顺序

原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有。 为什么写这篇文章? 说实话,关于js的异步执行顺序,宏任务、微任务...

Fundebug
2018/12/10
0
0
setTimeout延时0毫秒的作用

wizardpisces经验: 这几天做web动画,用到css3的animation,为了对一个存在的元素触发动画,可以通过添加className,可是只能触发一次,为了触发多次我尝试了先删除className后直接添加的方...

吟啸_徐行
2014/07/08
2.4K
0
你所不知道的setTimeout

JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成。它们向任务队列添加定时任务。初始接触它的人都觉得好简单,实时上真的如此么...

jeffjade
2016/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
39分钟前
84
5
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部