Je tripote la fonction javascript setTimeOut. J'ai 5 appels de fonction avec un délai différent. Ce que je veux est d'exécuter seulement les fonctions qui ont une différence de retard de 500ms entre chaque fonction. J'ai créé un violon (https://jsfiddle.net/vt7sanav/). Quelqu'un peut-il suggérer ce que je devrais faire pour vérifier le délai entre deux fonctions est de 500 ms puis exécuter la fonction sinon ignorer la fonction. Exemple: Packet1 arrive, doit être envoyé (imprimé) immédiatement, attendre 500ms et dans les 500ms, ignorer les nouveaux msgs (appels de fonction). N'imprimez que les messages dont le délai est inférieur à 500 ms.Exécuter des fonctions en fonction d'un certain délai et ignorer l'exécution d'autres fonctions
function postMessage(msg) {
$("#msgBox").append("\n" + msg + " time:" + new Date().getSeconds() + ":" + new Date().getMilliseconds());
}
function makeRequest(msg) {
postMessage(msg);
}
function makeRequestThrottled(msg) {
// Packet1 comes in, should be sent straight away. wait 500ms and within 500ms, ignore new msgs.
postMessage(msg);
}
function sendMessage(msg, delay) {
setTimeout(() =>
makeRequestThrottled(msg), delay);
}
sendMessage("Packet1", 200); //This should be printed straight away
sendMessage("Packet2", 600); //Shouldn't be printed, difference is 400ms (Packet2 -Packet1)
sendMessage("Packet3", 1800); // Should be printed, difference > 500ms (Packet3 -Packet2)
sendMessage("Packet4", 2400); //Should be printed, difference > 500ms (Packet4 -Packet3)
sendMessage("Packet5", 2600); //Shouldn't be printed, difference < 500ms (Packet4 -Packet5)
JavaScript est par nature asynchrone. Vous cherchez une «promesse». –
Je pense que nous pouvons le faire en utilisant setTimeout à l'intérieur de l'appel makeRequestThrottled, mais pas sûr comment cela fonctionne – zubairm