RxJS queue

2020-09-27 16:53 更新

隊(duì)列調(diào)度器

const queue: any;

描述

將每個(gè)下一個(gè)任務(wù)放在隊(duì)列中,而不是立即執(zhí)行

queue 延遲使用調(diào)度程序時(shí),其行為與 async 調(diào)度程序相同。

當(dāng)沒有延遲使用時(shí),它將同步安排給定的任務(wù)-在安排好任務(wù)后立即執(zhí)行。但是,當(dāng)遞歸調(diào)用時(shí)(即在已調(diào)度的任務(wù)內(nèi)部),將使用隊(duì)列調(diào)度程序調(diào)度另一個(gè)任務(wù),而不是立即執(zhí)行,該任務(wù)將被放入隊(duì)列并等待當(dāng)前任務(wù)完成。

這意味著,當(dāng)您使用 queue 調(diào)度程序執(zhí)行任務(wù)時(shí),您確定它會(huì)在該調(diào)度程序調(diào)度的其他任何任務(wù)開始之前結(jié)束。

例子

先遞歸調(diào)度,然后再做某事

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
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)