js遍历定时器,js获取所有定时器

http://www.itjxue.com  2023-01-05 02:17  来源:未知  点击次数: 

nodejs——定时器

JavaScript中可以实现定时器功能的有两个函数——setTimeout和setInterval,二者的不同是setTimeout只执行一次,而setInterval是以指定的时间间隔重复执行。setTimeout可以使用clearTimeout取消,setInterval可以使用clearInterval取消。

有时,我们会用setTimeout(callback,0)将任务推迟一段很短的时间,但是其实通过process.nextTick(callback)来实现会更好,因为Node中的事件循环在一个处理事件队列的循环里运行,每循环一次称为一个“tick”。使用process.nextTick(callback)回调函数会在事件队列内所有事件处理完毕后,会在下次事件循环之前被调用,即进入下个event loop前执行;而setTimeout(callback,0)把回调延迟到后面的某个event loop执行,具体由设置的延时时间和event loop的执行时间决定。

这样可以保证my_async_function函数是顺序执行。

js定时器问题?js高手请进!

其实很好理解,你点击一次按钮,相当于叫一个人过去,每隔300毫秒把div移动一下;你点两次,就相当于让两个人去干同样的事情,都是每隔300毫秒移动一次div,但是,假设过了300毫秒,第一个人过去移动了div,第二个人也会过去移动div,就相当于每隔300毫秒移动两倍原来的距离。你点多了,自然就移动的快。比如说你第一次点击后,间隔100毫秒点击第二次,那么第一个人在移动div后,第二个人间隔100毫秒后也会去移动div。

js 执行一个耗时操作时,比如一个大的遍历,如何才能真正实现异步,让浏览器界面不会假死。

方案1:针对支持html5 webworker的现代浏览器方案:。

代码1.你的大量计算,放到一个js文件中。如下:

//job.js

onmessage?=function?(evt){

??//do?massive?job.在这里你进行大量耗时的计算过程。

??postMessage(?data?);//将计算结果的数据发送会主线程

}

你的页面代码:

!DOCTYPE?HTML

html

head

?meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"/

?script?type="text/javascript"

//WEB页主线程

var?worker?=new?Worker("job.js");?//创建一个Worker对象并向它传递将在新线程中执行的脚本的URL

?worker.postMessage('开始计算');

?worker.onmessage?=function(evt){//接收worker传过来的数据函数

???console.log(evt.data);//输出worker发送来的数据,这里就获取到了大量计算的结果。

?}

?/script

?/head

?body/body

/html

方案2:对于不支持WebWorker线程的浏览器。

可以考虑分批处理。即是说创造一个间隔定时器setInterval。

每隔一小段时间,处理大量数据中的一部分。

这样就可以避免大量计算导致浏览器卡死。

大致代码如下(这里是简单的例子。具体情况具体分析。):

假设我们要计算1000万个数据的和。

var?jobData?=??[];//假设是一个数组。里面有1000万个数据。

function?sliceJob(){

????var?num?=?(jobData.length?/?100)?+?1;//把任务数据划分为100份。

????var?portion?=?100000;//每份有10万个数字。

????var?addition?=?0;//这里用来保存最后的结果。一开始是0;

????var?intv?=?setInterval(function(){

????????if(num--){

????????????//然后每一份结果。

????????????additoin?+=?every;

????????}?else?{

????????????计算最后一份,然后输出结果。

????????????alert('最终结果是:',?addition);

????????????window.clearInterval(intv);

????????}

????},?50);

}

此外。jQuery的deferred对象无法实现你的要求。

因为deferred对象的目的是为了串行处理异步过程。

但是异步过程在执行的过程中,如果耗时过长,仍然会阻塞浏览器线程,导致浏览器不可操作(卡死)。

唯一的一个例外是$.ajax。$.ajax方法也会返回一个Deferred对象。但是由于该异步过程是用的XMLHttpRequest。而xhr默认是异步执行的,相当于另起一个线程,因此不会阻塞浏览器县城。

js定时器有哪些?

js 定时器有以下两个方法:

setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。

setTimeout() :在指定的毫秒数后调用函数或计算表达式。

js for循环中使用定时器

var?items?=?document.querySelectorAll('#listli');

for?(var?i=0;?iitems.length;?i++)?{

var?item?=?items[i];

setTimeout(function(){

item.style.backgroundColor?=?'red';

},5);

}

javascript怎么清除所有的定时器setInterval

//创建一个定时器

var?timer?=?setInterval(function(){

??//dosomething...

??if(这里写条件){//满足某个条件时?清除定时器

????clearInterval(timer);

??}

},1000)

(责任编辑:IT教学网)

更多

推荐浏览器文章