ce qu'est un "Planificateur" dans RxJS
Je v vu le terme Planificateur très fréquemment dans la documentation.
Mais, qu'est-ce terme signifie? Je ne sais même pas comment utiliser ce qu'on appelle Scheduler
. La documentation officielle ne m'a pas dit ce qu'est une Scheduler
est exactement. Est-ce juste un concept commun ou un concept spécifique dans RxJS?
Vous devez vous connecter pour publier un commentaire.
Rx planificateurs de fournir une couche d'abstraction qui permet de travailler à être programmé pour s'exécuter, peut-être dans l'avenir, sans le code d'appel d'avoir à être conscient du mécanisme utilisé pour planifier le travail.
Chaque fois qu'un Rx méthode doit générer une notification, il planifie le travail sur un programmateur. En fournissant un planificateur de la Rx méthode au lieu d'utiliser la valeur par défaut, vous pouvez subtilement contrôler la manière dont ces notifications sont envoyées.
Côté serveur implémentations de Rx (comme Rx.NET), les planificateurs de jouer un rôle important. Ils vous permettent de planifier lourds travaux sur le pool de threads ou des threads dédiés, et exécuter le final de la souscription sur le thread de l'INTERFACE utilisateur de sorte que vous pouvez mettre à jour votre INTERFACE utilisateur.
Lors de l'utilisation de RxJs, il est en fait assez rare que vous avez besoin de s'inquiéter à propos de l'ordonnanceur argument pour la plupart des méthodes. JavaScript est essentiellement mono-thread, il n'y a pas beaucoup d'options pour la planification et la valeur par défaut planificateurs sont généralement le bon choix.
Le seul vrai choix sont les suivants:
immediateScheduler
- Exécute le travail de façon synchrone et immédiatement. Une sorte de pas à l'aide d'un planificateur de tous. Travaux prévus ainsi, il est garanti à exécuter de manière synchrone.currentThreadScheduler
- Similaire àimmediateScheduler
dans lesquelles le travail est exécuté immédiatement. Toutefois, de ne pas exécuter les travaux de manière récursive. Donc, si le travail est en cours et horaires de plus de travail, alors que des travaux supplémentaires sont mis en file d'attente pour être exécuté après le travail en cours de finitions. Ainsi, les travaux parfois de façon synchrone et parfois de manière asynchrone. Ce planificateur est utile pour éviter les débordements de pile ou d'une récursion infinie. Par exempleRx.Observable.of(42).repeat().subscribe()
serait la cause d'une récursion infinie si elle s'est déroulée sur leimmediate
planificateur, mais depuisreturn
s'exécute sur l'currentThread
ordonnanceur par défaut, une récursion infinie est à éviter.timeoutScheduler
- Le seul programme de planification qui prend en charge le travail planifié pour être exécuté dans l'avenir. Utilise essentiellementsetTimeout
pour planifier tous les travaux (si vous planifiez les travaux à exécuter "maintenant", puis il utilise d'autres plus rapide des méthodes asynchrones pour planifier le travail). Aucun des travaux prévus sur ce planificateur est garanti à exécuter de manière asynchrone.Il y a peut être un peu plus maintenant, comme un planificateur horaires de travail sur le navigateur les images de l'animation, etc.
Si vous essayez d'écrire de code de tests, alors vous veulent presque toujours de fournir le planificateur argument. C'est parce que dans vos tests unitaires, vous allez créer
testScheduler
instances, ce qui permettra à votre appareil de test de contrôle de l'horloge utilisée par votre Rx code (et donc de contrôler le moment exact de l'opération).