setTimeout, setInteval,process.nextTick

setTimeout(fn,n): n毫秒后,把函数fn,插入 event queue. 函数返回值为 一个 “超时处理器” 的内部对象,只能使用 clearTimeout() 处理。

var timeout_ms = 1000;
var timeout = setTimeout(function(){
    console.log("timed out");
},timeout_ms);//1 秒后 把 函数 插入 event queue (件事队列),当前js源代码运行完最后一行后,再执行 event queue 中的函数,轮到它执行的时候再执行。函数执行的时候,会回到原来的上下文,这里会在10000ms后 执行。

var timeout_ms = 10000;//执行完这一行后,才会执行 event queue 中的 函数。

setInterval(fn,n):每隔n毫秒,把函数插入 event queue . 这个函数返回 一个 调度处理器对象,   可以用 clearInterval()  ,取消它。


用setTimeout(),代替 setInterval()


function abc() {
    var x = 0;
    for (var i =0; i<1000000000;i++){
        x = x + 1;
    }
    console.log(x);
}

setInterval(function() {
    setTimeout(abc)
},100);
//当abc() 函数的执行时间,大于 setInterval 设定的间隔时间。(意味着:当一个abc还没有执行完,一个或者多个abc()就被插入 event queye)
 //event queue 中的abc(),会越来越多,而且连续的排在一起,执行完上一个abc(),立即执行下一个abc(),一个个abc()将来连续执行,而不是设定的按间隔时间 来间隔执行。
以下代码,abc.txt 将被并行读取的,而不是每 1 秒 被读取一次。

var fs = require('fs');
function read(){
    var log = fs.readFile("./log.txt");//2秒钟读完。--Node.js 平台中,除了js源码本身是同步的,其它都是异步非阻塞的,I/O操作并行执行。
    console.log("abc.txt");
}

setInterval(read,1000); //每隔一秒,把read() 插入 event queue.




process.nextTick, 用使process.nextTick 的地方尽理使用nextTick,


你可能感兴趣的:(setTimeout, setInteval,process.nextTick)