Skip to content

RxJS-Scheduler(调度器) #5

Open
@isNeilLin

Description

@isNeilLin

RxJS-Scheduler(调度器)

调度器控制着何时启动subscription和何时发送通知。调度器可以规定observable在什么样的执行上下文中发送通知给它的观察者。它由三个部分组成:

  • 调度器是一种数据结构。它知道如何根据优先级或其他标准来存储任务和将任务排序。
  • 调度器是执行上下文。它表示在何时何地执行任务。
  • 调度器有一个虚拟的时钟。调度器功能通过它的getter方法now()提供了时间的概念。在具体调度器上安排的任务将严格遵循该时钟所表示的时间。

示例:采用普通的Observable,它同步的发出值123,并使用操作符observeOn来指定async调度器发送这些值。

var observable = Rx.Observable.create(function(observer){
	observer.next(1);
	observer.next(2);
	observer.next(3);
	observer.complete();
})
.observeOn(Rx.Scheduler.async);

console.log('before subscribe')
observable.subscribe({
	next: x => console.log('got value '+ x),
	error: e => console.error(error),
	complete: () => console.log('donw')
})
console.log('after subscribe')

输出结果:

before subscribe
after subscribe
got value 1
got value 2
got value 3
done

使用调度器

静态创建操作符通常可以接收调度器作为参数。 例如,from(array, scheduler)可以指定调度器,当发送从array转换的每个通知时使用。调度器通常作为操作符的最后一个参数。下面的静态创建操作符接收调度器作为参数:

  • bindCallback
  • bindNodeCallback
  • combineLatest
  • concat
  • empty
  • from
  • fromPromise
  • interval
  • merge
  • of
  • range
  • throw
  • timer

**使用subscribeOn来调度subscribe()调用在什么样的上下文中执行。**默认情况下,Observable的subscribe()调用会立即同步的执行,使用实例操作符subscribeOn(scheduler)可以延迟或安排在给定的调度器上执行实际的subscription。

使用observeOn来调度发送通知的上下文,实例操作符observeOn(scheduler)在源Observable和目标观察者中间引入了一个中介观察者。中介观察者负责调度,它使用给定的scheduler来调用目标观察者。

实例操作符可能会接收调度器作为参数

erTime、debounceTime、delay、auditTime、sampleTime、throttleTime、timeInterval、timeout、timeoutWith、windowTime这样时间相关的操作符全部接收调度器作为最后的参数。并且默认的操作是在Rx.Scheduler.async调度器上。

其他接收调度器作为参数的实例操作符: cache combineLatest concat expand merge publishReplay startWith

Metadata

Metadata

Assignees

No one assigned

    Labels

    框架&工具库Vue和React等前端框架或工具库相关

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions