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 中的 函数。
用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,