关于node的setTimeout的延时最大限制

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)
}

  

posted on 2017-03-02 18:35  坚壳  阅读(345)  评论(0编辑  收藏  举报