Javascript 如果函数在1秒内被调用50次,则只运行该函数一次

Javascript 如果函数在1秒内被调用50次,则只运行该函数一次,javascript,function,repeat,Javascript,Function,Repeat,这就是它的功能,当新的秩序到来时,它会发出声音。因此,一次有50个订单,现在它播放声音50次,只有1次就足够了。你知道我怎样才能做到这一点吗 function playSound() { var audio = new Audio('/audio/short_notification.mp3'); audio.play() } 找到了一些,但他们没有在这方面提供太多帮助。您可以使用全局变量var检查它是否播放过一次 var isPlayedOnce = false; func

这就是它的功能,当新的秩序到来时,它会发出声音。因此,一次有50个订单,现在它播放声音50次,只有1次就足够了。你知道我怎样才能做到这一点吗

function playSound() {
    var audio = new Audio('/audio/short_notification.mp3');
    audio.play()
}

找到了一些,但他们没有在这方面提供太多帮助。

您可以使用全局变量var检查它是否播放过一次

var isPlayedOnce = false;

function playSound() {
    if(!isPlayedOnce){
         var audio = new Audio('/audio/short_notification.mp3');
         audio.play();
         isPlayedOnce = true;
    }
}

您可以使用全局变量var来检查它是否播放过一次

var isPlayedOnce = false;

function playSound() {
    if(!isPlayedOnce){
         var audio = new Audio('/audio/short_notification.mp3');
         audio.play();
         isPlayedOnce = true;
    }
}

使用setTimeout函数重置控制音频播放的变量

let isPlaying = true;
const silentTimeOutCounter = 1000;

function playSound() {
    if(isPlaying){
      var audio = new Audio('/audio/short_notification.mp3');
      audio.play();
      isPlaying = false;
      setTimeout(() => {isPlaying = true;} ,silentTimeOutCounter);
    }
}

playSound();


使用setTimeout函数重置控制音频播放的变量

let isPlaying = true;
const silentTimeOutCounter = 1000;

function playSound() {
    if(isPlaying){
      var audio = new Audio('/audio/short_notification.mp3');
      audio.play();
      isPlaying = false;
      setTimeout(() => {isPlaying = true;} ,silentTimeOutCounter);
    }
}

playSound();


您可以设置
计时器
,并检查函数是否在最后一秒被调用

let timer=0;
函数playSound(){
如果(Date.now()-计时器<1000)返回;
计时器=Date.now();
var audio=新音频('/audio/short_notification.mp3');
音频播放();

}
您可以设置
计时器
并检查该函数是否在最后一秒被调用

let timer=0;
函数playSound(){
如果(Date.now()-计时器<1000)返回;
计时器=Date.now();
var audio=新音频('/audio/short_notification.mp3');
音频播放();

}
您要找的是debounce或Dethrottle如果订单“一次全部”发出,为什么每个订单都有声音?任何导入这些订单的人都应该为导入触发一次声音,而不是为每个订单触发一次。您可以在调用该方法的位置添加代码吗?您要查找的是debounce或DeThrottle如果订单“一次全部”发出,那么为什么每个订单都有声音?任何导入这些订单的人都应该为导入触发一次声音,而不是为每个订单触发一次声音。您可以在调用该方法的位置添加代码吗?这仅在第一个操作中有效,但当以后出现新订单时,该值始终为真,除非我们重新加载浏览器以将标志重新初始化为假。然后,当您收到新订单时,您可以将此isPlayedOnce更新为true,但只有当您能够区分新订单和旧订单时,此操作才有效。如果不是您的情况,则您可以等待一段时间,然后使用setTimeout或使用任何变量(在其上存储以前的时间)将isPlayedOnce更新为true。这仅在第一次操作中有效,但在以后的新顺序出现时,该值始终为true,除非我们重新加载浏览器以将标志重新初始化为false。然后,当您收到新订单时,您可以将此isPlayedOnce更新为true,但只有当您能够区分新订单和旧订单时,此操作才有效。如果情况并非如此,则可以等待一段时间,然后使用setTimeout或使用任何变量(在其上存储以前的时间)将isPlayedOnce更新为true