node的setTimeout有最大值限制,最大值为2^31-1。一旦超过了最大值,其效果就跟延时值为0的情况一样,也就是马上执行。chrome测试并未发现该问题,解决方案如下,重写setTimeout
var _setTimeout=function(callback, millisecond) { var max = Math.pow(2, 31) - 1; var now = millisecond; if (millisecond > max) { now = max; } var remain = millisecond - max; return setTimeout(function() { if (remain <= 0) { callback(); } else { _setTimeout(callback, remain); } }, now) }