was ist ein `Scheduler` in RxJS
I ' V gesehen der Begriff Scheduler sehr Häufig in der Dokumentation.
Aber, was bedeutet dieser Begriff? Ich selbst weiß nicht, wie die Verwendung von sogenannten Scheduler
. Die offizielle Dokumentation nicht sagen, was mir ein Scheduler
genau ist. Ist dies nur ein gemeinsames Konzept oder ein bestimmtes Konzept in RxJS?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rx-Planer bieten eine Abstraktion, ermöglicht die Arbeit ausgeführt wird, wird möglicherweise in der Zukunft, ohne den aufrufenden code brauchen, um bewusst sein, der Mechanismus, der verwendet wird, um die Arbeit planen.
Immer wenn ein Rx-Methode braucht, um eine Benachrichtigung zu generieren, plant es die Arbeit an einem scheduler. Indem Sie einen scheduler, um die Rx-Methode, anstatt den Standardnamen zu verwenden, können Sie subtil Steuern, wie die Benachrichtigungen sind verschickt.
Serverseitigen Implementierungen von Rx (wie Rx.NET), Disponenten eine wichtige Rolle spielen. Sie ermöglichen es, zu planen, heavy-duty arbeiten an den thread-pool oder root-threads, und führen Sie das Letzte Abonnement, die auf dem UI-thread, also können Sie aktualisieren Sie Ihre UI.
Bei der Verwendung RxJs, es ist eigentlich ziemlich selten, dass Sie brauchen, um über die scheduler-argument für die meisten Methoden. Da JavaScript im wesentlichen single-threaded, es gibt nicht eine Menge von Optionen für die zeitgesteuerte Verarbeitung und die Standard-Scheduler sind in der Regel die richtige Wahl.
Die einzige wirkliche Entscheidungen sind:
immediateScheduler
- Läuft die Arbeit synchron und unmittelbar. In der Art, wie Sie nicht über einen scheduler an alle. Arbeit eingeplant, damit garantiert ist, synchron ausgeführt zu werden.currentThreadScheduler
- ÄhnlichimmediateScheduler
bei, dass die arbeiten sofort ausgeführt werden. Allerdings läuft es nicht funktioniert rekursiv. Also, wenn die Arbeit ausgeführt wird und Zeitpläne mehr Arbeit, dann, dass zusätzliche Arbeit in der Warteschlange werden ausgeführt, nachdem die aktuelle Arbeit beendet. Daher ist die Arbeit manchmal läuft synchron und manchmal asynchron. Dieser scheduler ist nützlich, um zu vermeiden, stack-overflows oder unendliche Rekursion. Zum BeispielRx.Observable.of(42).repeat().subscribe()
würde Endlosschleife verursachen, wenn es lief auf dieimmediate
scheduler, aber dareturn
läuft auf dercurrentThread
scheduler standardmäßig eine unendliche Rekursion zu vermeiden.timeoutScheduler
- Der einzige Planer, unterstützt das arbeiten planmäßig ausgeführt werden, in der Zukunft. Im wesentlichen verwendetsetTimeout
zu planen, dass alle arbeiten (obwohl, wenn Sie die Arbeit planen, ausführen und "jetzt", dann verwendet er andere schneller asynchrone Methoden, um die Arbeit planen). Alle geplanten arbeiten auf diesem scheduler garantiert werden asynchron ausgeführt.Kann es einige mehr, wie z.B. einen scheduler, der Zeitpläne auf die browser frames einer animation, etc.
Wenn Sie versuchen zu schreiben von testbarem code, dann werden Sie fast immer wollen, dass die Versorgung der scheduler argument. Dies ist, weil in Ihr unit-tests erstellen, erstellen Sie
testScheduler
Instanzen, die lassen Sie Ihre unit-test Steuerung der Uhr verwendet, die durch Ihre Rx-code (und damit die Kontrolle, den genauen Zeitplan der Operationen).