import { QueueAction } from './QueueAction'; | |
import { QueueScheduler } from './QueueScheduler'; | |
/** | |
* | |
* Queue Scheduler | |
* | |
* <span class="informal">Put every next task on a queue, instead of executing it immediately</span> | |
* | |
* `queue` scheduler, when used with delay, behaves the same as {@link asyncScheduler} scheduler. | |
* | |
* When used without delay, it schedules given task synchronously - executes it right when | |
* it is scheduled. However when called recursively, that is when inside the scheduled task, | |
* another task is scheduled with queue scheduler, instead of executing immediately as well, | |
* that task will be put on a queue and wait for current one to finish. | |
* | |
* This means that when you execute task with `queue` scheduler, you are sure it will end | |
* before any other task scheduled with that scheduler will start. | |
* | |
* ## Examples | |
* Schedule recursively first, then do something | |
* ```ts | |
* import { queueScheduler } from 'rxjs'; | |
* | |
* queueScheduler.schedule(() => { | |
* queueScheduler.schedule(() => console.log('second')); // will not happen now, but will be put on a queue | |
* | |
* console.log('first'); | |
* }); | |
* | |
* // Logs: | |
* // "first" | |
* // "second" | |
* ``` | |
* | |
* Reschedule itself recursively | |
* ```ts | |
* import { queueScheduler } from 'rxjs'; | |
* | |
* queueScheduler.schedule(function(state) { | |
* if (state !== 0) { | |
* console.log('before', state); | |
* this.schedule(state - 1); // `this` references currently executing Action, | |
* // which we reschedule with new state | |
* console.log('after', state); | |
* } | |
* }, 0, 3); | |
* | |
* // In scheduler that runs recursively, you would expect: | |
* // "before", 3 | |
* // "before", 2 | |
* // "before", 1 | |
* // "after", 1 | |
* // "after", 2 | |
* // "after", 3 | |
* | |
* // But with queue it logs: | |
* // "before", 3 | |
* // "after", 3 | |
* // "before", 2 | |
* // "after", 2 | |
* // "before", 1 | |
* // "after", 1 | |
* ``` | |
*/ | |
export const queueScheduler = new QueueScheduler(QueueAction); | |
/** | |
* @deprecated Renamed to {@link queueScheduler}. Will be removed in v8. | |
*/ | |
export const queue = queueScheduler; | |