Skip to content

throttling ​

La fonction throttling() empêche plusieurs exécutions trop proches d'un même flow. Elle peut soit retourner immédiatement une valeur de repli, soit garder seulement le dernier appel avec keepLast: true.

Exemple interactif ​

Syntaxe ​

typescript
function throttling<
	GenericValue extends unknown = undefined,
	GenericKeepLast extends boolean = false
>(
	time: number,
	params?: {
		returnValue?: GenericValue;
		keepLast?: GenericKeepLast;
	}
): Generator | AsyncGenerator

Paramètres ​

  • time : Fenêtre de temps minimale entre deux exécutions du même flow.
  • params.returnValue : Valeur retournée quand un appel est ignoré pendant la fenêtre de throttling.
  • params.keepLast : Quand cette option vaut true, seul le dernier appel ignoré est rejoué après l'attente.

Valeur de retour ​

Par défaut, throttling() retourne un générateur synchrone. Avec keepLast: true, il retourne un générateur asynchrone qui attend avant de reprendre le dernier appel conservé.

Remarques ​

  • L'état interne est stocké dans une WeakMap dont la clé est la référence du flow exécuté.
  • Pour partager la même fenêtre de throttling entre plusieurs appels, réutilisez le même flow créé avec F.create(...) ou la même fonction obtenue avec F.toFunction(...).
  • Un F.run(function *() { ... }) déclaré inline ne partage pas cette fenêtre avec les appels suivants.
  • Si une même exécution yield plusieurs fois throttling(...), seul le premier effet rencontré est pris en compte par le runner.

Voir aussi ​

  • queue - Sérialise les exécutions au lieu de les ignorer
  • debounce - Attend avant de laisser continuer uniquement le dernier appel
  • calledByNext - Déclenche un callback quand une exécution suivante remplace l'actuelle
  • run - Exécute le flow et applique les effets de throttling

Diffusé sous licence MIT.