что такое "планировщик" в RxJS
Я видел термин планировщик очень часто в документации.
но, что означает этот термин? Я даже не знаю, как использовать так называемый Scheduler. Официальная документация не сказала мне, что a Scheduler именно. Это просто общая концепция или конкретная концепция в RxJS?
1 ответ:
планировщики Rx предоставляют абстракцию, которая позволяет запланировать работу, возможно, в будущем, без вызывающего кода, который должен быть осведомлен о механизме, используемом для планирования работы.
всякий раз, когда метод Rx должен генерировать уведомление, он планирует работу над планировщиком. Поставляя планировщик в метод Rx вместо использования по умолчанию, вы можете тонко управлять тем, как эти уведомления отправляются.
в серверных реализациях Rx (например, Rx.NET), планировщики играют важную роль. Они позволяют планировать тяжелую работу в пуле потоков или выделенных потоках и запускать окончательную подписку в потоке пользовательского интерфейса, чтобы вы могли обновить свой пользовательский интерфейс.
при использовании RxJs на самом деле довольно редко вам нужно беспокоиться о аргументе планировщика для большинства методов. Поскольку JavaScript по существу является однопоточным, существует не так много вариантов планирования, и планировщики по умолчанию обычно являются правильными выбор.
единственный реальный выбор:
immediateScheduler- выполняет работу синхронно и сразу. Вроде как не использовать планировщик вообще. Работа, запланированная таким образом, гарантированно выполняется синхронно.currentThreadScheduler- аналогичноimmediateSchedulerв том, что работа выполняется немедленно. Однако он не выполняет работу рекурсивно. Итак, если работа выполняется и расписывается больше работа, затем эта дополнительная работа помещается в очередь для запуска после окончания текущей работы. Таким образом, работа иногда выполняется синхронно, а иногда и асинхронно. Этот планировщик позволяет избежать переполнения стека или бесконечной рекурсии. НапримерRx.Observable.of(42).repeat().subscribe()вызовет бесконечную рекурсию, если он побежал наimmediateпланировщик, но так какreturnработает наcurrentThreadпланировщик по умолчанию бесконечная рекурсия избегается.timeoutScheduler- единственный планировщик, который поддерживает работу планируется выполнить в будущем. По существу используетsetTimeoutto запланируйте всю работу (хотя если вы запланируете работу для запуска "сейчас", то он использует другие более быстрые асинхронные методы для планирования работы). Любая работа, запланированная в этом планировщике, гарантированно выполняется асинхронно.теперь может быть еще несколько, например, планировщик, который планирует работу с кадрами анимации браузера и т. д.
если вы пытаетесь написать тестируемый код, то вы почти всегда хотите предоставить аргумент планировщика. Это потому, что в вашем модульные тесты, вы будете создавать
testSchedulerэкземпляры, которые позволят вашему модульному тесту управлять часами, используемыми вашим кодом Rx (и, таким образом, контролировать точное время операций).
Comments