Javascript 忽略特定时间内的函数调用

Javascript 忽略特定时间内的函数调用,javascript,Javascript,我正在为所描述的问题寻找最佳解决方案 场景:有一个函数getData,它每秒都被调用一次。 如果现在调用它,我想在5秒内忽略对这个函数的任何调用 如何在javascript中最好地实现这一点。保存上次调用时间并检查是否超过5秒: var lastCall = 0; function getData() { if (lastCall >= moment().subtract(5, 'mins').unix()) { return; } lastCa

我正在为所描述的问题寻找最佳解决方案

场景:有一个函数getData,它每秒都被调用一次。 如果现在调用它,我想在5秒内忽略对这个函数的任何调用


如何在javascript中最好地实现这一点。

保存上次调用时间并检查是否超过5秒:

var lastCall = 0;

function getData() {
    if (lastCall >= moment().subtract(5, 'mins').unix()) {
        return;
    }

    lastCall = moment().unix();

    /* rest of code */
}

保存上次通话时间并检查通话时间是否超过5秒:

var lastCall = 0;

function getData() {
    if (lastCall >= moment().subtract(5, 'mins').unix()) {
        return;
    }

    lastCall = moment().unix();

    /* rest of code */
}

添加一个标志,并在5秒后和每次未忽略的呼叫上切换:

var shouldIgnore = false;

function getData() {
    if (shouldIgnore) {
        return;
    }
    shouldIgnore = true;
    setTimeout(() => {
        shouldIgnore = false;
    }, 5000);

    /* rest of code */
}

添加一个标志,并在5秒后和每次未忽略的呼叫上切换:

var shouldIgnore = false;

function getData() {
    if (shouldIgnore) {
        return;
    }
    shouldIgnore = true;
    setTimeout(() => {
        shouldIgnore = false;
    }, 5000);

    /* rest of code */
}

您可以使用setTimeout执行以下操作:。我已经给出了一些util方法的示例,以使其更简单

油门功能:

如何使用它:

输出: 迪帕克特先生1

这里你注意到了,即使我在5秒后多次打电话给LogAfter5。它执行最后一个。你可以用同样的方法写一次电话

常数节流阀=fn,ms=0=>{ 让最后一次运行; 返回函数…args{ const currTime=+新日期; if!lastRunTime | | currTime-lastRunTime>ms{ lastRunTime=+新日期; fn.applythis,args; } }; }; 异步函数throttleEx{ 常数logTill1Sec=节流阀,1*1000; logTill1Secdeepakt_1; 等待新Promiser=>setTimeoutr,500;//2秒虚拟延迟 logTill1Secdeepak_t2; }; 常数反盎司=fn,ms=0=>{ 让时光流逝; 返回函数…args{ cleartimeoutid; timeoutId=setTimeout=>fn.applythis,args,ms; }; }; 常数dLog=debouncelog,200//毫秒时间 dLogdeepak11; dLogdeepak22; dLogdeepak33; 函数日志名{ console.log`Mr.${name}`; } 异步函数{ 常数logAfter5Sec=debouncelog,1*1000; logAfter5Secdeepak; 等待新Promiser=>setTimeoutr,500;//2秒虚拟延迟 logAfter5Secdeepak2;
}; 您可以使用setTimeout执行以下操作:。我已经给出了一些util方法的示例,以使其更简单

油门功能:

如何使用它:

输出: 迪帕克特先生1

这里你注意到了,即使我在5秒后多次打电话给LogAfter5。它执行最后一个。你可以用同样的方法写一次电话

常数节流阀=fn,ms=0=>{ 让最后一次运行; 返回函数…args{ const currTime=+新日期; if!lastRunTime | | currTime-lastRunTime>ms{ lastRunTime=+新日期; fn.applythis,args; } }; }; 异步函数throttleEx{ 常数logTill1Sec=节流阀,1*1000; logTill1Secdeepakt_1; 等待新Promiser=>setTimeoutr,500;//2秒虚拟延迟 logTill1Secdeepak_t2; }; 常数反盎司=fn,ms=0=>{ 让时光流逝; 返回函数…args{ cleartimeoutid; timeoutId=setTimeout=>fn.applythis,args,ms; }; }; 常数dLog=debouncelog,200//毫秒时间 dLogdeepak11; dLogdeepak22; dLogdeepak33; 函数日志名{ console.log`Mr.${name}`; } 异步函数{ 常数logAfter5Sec=debouncelog,1*1000; logAfter5Secdeepak; 等待新Promiser=>setTimeoutr,500;//2秒虚拟延迟 logAfter5Secdeepak2;

};您可以对照时间戳进行检查;不过,会有更好的选择,这取决于你的选择code@baao但是如何保护该函数不被其他任何地方执行?@ritaj setTime无法解决这个问题,如果没有调用,我希望尽快执行,然后在特定时间内忽略对同一函数的任何调用。@Messerbil将看到justina的回答您可以对照时间戳进行检查;不过,会有更好的选择,这取决于你的选择code@baao但是如何保护该函数不被其他任何地方执行?@ritaj setTime无法解决这个问题,如果没有调用,我希望尽快执行,然后在特定时间内忽略对同一函数的任何调用。@Messerbil将看到justina的回答您真的需要库吗?只需执行一个setTimeout…@ritaj setTimeout不适合使用,新的日期就足够了though@baao不是吗?看看我的答案。@ritaj setTimeout使函数异步。这可能会导致在返回某些内容时出现问题。@baao是的,可以使用新的日期,但使用了momentjs作为示例。您真的需要一个库吗?只需执行一个setTimeout…@ritaj setTimeout不适合使用,新的日期就足够了though@baao不是吗?看看我的答案。@ritaj setTimeout使函数异步。这可能会导致返回某些内容时出现问题。@baao是的,可以使用新日期,但使用momentjs作为示例清理更多,添加了debounce功能清理更多,添加了debounce功能