Queue Scheduler
const queue: any;
Description
Put every next task on a queue, instead of executing it immediately
queue
scheduler, when used with delay, behaves the same as async
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
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
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