例:
ob$.subscribeOn(Scheduler.queue)
.subscribe(() => {...})
Run Code Online (Sandbox Code Playgroud)
要么
ob$.subscribe(() => {...})
Run Code Online (Sandbox Code Playgroud)
没什么区别吧?
当您查看queue调度程序如何影响行为时,差异是显而易见的combineLatest.
比较此片段的行为,其中未null指定调度程序(即调度程序):
const a = Rx.Observable.of(1, 2);
const b = Rx.Observable.of(3, 4);
const c = Rx.Observable.of(5, 6);
console.log("before");
Rx.Observable
.combineLatest(a, b, c)
.subscribe(value => console.log(JSON.stringify(value)));
console.log("after");Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>Run Code Online (Sandbox Code Playgroud)
有了这个片段:
const a = Rx.Observable.of(1, 2, Rx.Scheduler.queue);
const b = Rx.Observable.of(3, 4, Rx.Scheduler.queue);
const c = Rx.Observable.of(5, 6, Rx.Scheduler.queue);
console.log("before");
Rx.Observable
.combineLatest(a, b, c, Rx.Scheduler.queue)
.subscribe(value => console.log(JSON.stringify(value)));
console.log("after");Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>Run Code Online (Sandbox Code Playgroud)
请注意,两个代码段都是同步运行的.queue当没有指定延迟时,调度程序同步执行调度的操作.
在第一个片段中,以深度优先的方式枚举了可观察量.也就是说,源observable a中的所有值都是在observable 的值之前枚举b并c枚举的.这只能看到两个组合值与最后一个值a和b来自的两个值一起发出c.
但是,在第二个片段中,值以广度优先的方式枚举.也就是说,从a后面跟着一个值来枚举一个值b,等等.这会发现更多的组合.
简而言之,queue调度程序的行为方式是这样的,因为当正在执行已调度的操作时调度操作时,新调度的操作将排队.
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |