RxJS queue
队列调度器
const queue: any;
描述
将每个下一个任务放在队列中,而不是立即执行
queue
延迟使用调度程序时,其行为与 async
调度程序相同。
当没有延迟使用时,它将同步安排给定的任务-在安排好任务后立即执行。但是,当递归调用时(即在已调度的任务内部),将使用队列调度程序调度另一个任务,而不是立即执行,该任务将被放入队列并等待当前任务完成。
这意味着,当您使用 queue
调度程序执行任务时,您确定它会在该调度程序调度的其他任何任务开始之前结束。
例子
先递归调度,然后再做某事
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"
递归重新安排自身
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