Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节气门功能持续2秒_Javascript_Node.js - Fatal编程技术网

Javascript 节气门功能持续2秒

Javascript 节气门功能持续2秒,javascript,node.js,Javascript,Node.js,我有以下功能,显示下载信息,如文件大小和速度。这些信息似乎每秒更新几次。我只希望每隔2秒更新一次progressInfo部分,以防止显示的信息抖动 我已经尝试过使用超时和间隔,但似乎无法实现这一点 https.get(options, function (update) { update.on('data', function (chunk) { file.write(chunk); len += chunk.length; fileDow

我有以下功能,显示下载信息,如文件大小和速度。这些信息似乎每秒更新几次。我只希望每隔2秒更新一次
progressInfo
部分,以防止显示的信息抖动

我已经尝试过使用超时和间隔,但似乎无法实现这一点

https.get(options, function (update) {
    update.on('data', function (chunk) {
        file.write(chunk);
        len += chunk.length;
        fileDownloaded = (len / 1048576).toFixed(1);
        now = Date.now(); speed = len / (now - startTime) / 1024;
        speed = ' - ' + speed.toFixed(1) + ' MB/s';

        setInterval(function() {
            progressInfo.html(fileDownloaded + ' MB of ' + speed);
        }, 2000);
    });
});

尝试使用lodash或下划线中的节流函数

从下划线文档中:

油门

_.throttle(function, wait, [options]) 
创建并返回传递函数的新的限制版本, 当反复调用时,它实际上只调用原始 每等待毫秒最多运行一次。有益于 速率限制事件的发生速度快于您所能跟上的速度

如果您不想添加一个完整的外部库来处理这种情况,这里有一个节流函数的简单实现

var throttle = function(func, wait) {
  var timer;
  return function(){
    var currTime = new Date();
    var elapsed = currTime - timer;
    if (timer === undefined || elapsed > wait){
      func.apply(this, arguments);
      timer = currTime;
    }
  };
};

只需防止在已调用函数后重复调用函数即可。您可以使用一个简单的标志来检查html是否应该更新,或者processInfo更新是否已经启动


并使用
setTimeout(函数,毫秒)
而不是
setIntervall(函数,毫秒)
来执行processInfo函数的更新,只更新其中的一个。

这让我更接近了,但是,最初这会在更新html之前等待2秒。如何更改此设置以允许它立即启动html更新,然后施加2秒的延迟?@User394839859现在立即完成初始更新。我不确定添加完整的外部库来处理如此简单的情况是否是一个好主意?这只是一个选项,它们是公共库,可能已经在应用程序中使用,或者在其他地方有其他用途。无论哪种方式,我都用一个节流函数的简单节流实现更新了我的答案。
var throttle = function(func, wait) {
  var timer;
  return function(){
    var currTime = new Date();
    var elapsed = currTime - timer;
    if (timer === undefined || elapsed > wait){
      func.apply(this, arguments);
      timer = currTime;
    }
  };
};