JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 9 · Exercice de TD
Limiter la cadence
Programmation asynchrone · niveau 2
Énoncé
L'anti-rebond du cours attend la fin d'une rafale. On veut ici autre chose : pendant un défilement, mettre à jour un indicateur au plus une fois toutes les 250 ms. Écrire limiter(f, ms), qui renvoie une fonction exécutant f si le dernier appel exécuté date d'au moins ms millisecondes, et ignorant l'appel sinon. Avec dix appels espacés de 100 ms, lesquels sont exécutés ?
Corrigé
function limiter(f, ms) {
let dernier = -Infinity;
return (...args) => {
const maintenant = Date.now();
if (maintenant - dernier >= ms) {
dernier = maintenant;
f(...args);
}
};
}
Les appels arrivent à 0, 100, 200, …, 900 ms. L'appel 0 est exécuté ; les appels 1 et 2 (100 et 200 ms après) sont ignorés ; l'appel 3 (300 ms) est exécuté, et ainsi de suite : les appels 0, 3, 6 et 9, comme le confirme exercices/ex10-limiter.mjs. Comme retarder, c'est une fermeture : la variable dernier survit entre les appels.
100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.