gpt4 book ai didi

RxJS 与 Scheduler.queue 和 null 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 14:46:11 28 4
gpt4 key购买 nike

enter image description here

例子:

ob$.subscribeOn(Scheduler.queue) 
.subscribe(() => {...})

ob$.subscribe(() => {...})

没什么区别吧?

最佳答案

当您查看 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");
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

有了这个片段:

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");
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

请注意,两个代码段同步运行。 queue 调度器在没有指定延迟时同步执行调度的 Action 。

在第一个片段中,可观察对象以深度优先的方式进行枚举。也就是说,在枚举来自可观察对象 bc 的值之前,枚举来自源 observable a 的所有值。这只会看到来自 ab 的最后一个值以及来自 c 的两个值发出的两个组合值。

但是,在第二个代码段中,值以广度优先的方式枚举。也就是说,从 a 中枚举一个值,然后从 b 中枚举一个值,等等。这样会发出更多组合。

简而言之,queue 调度程序的行为方式是这样的,因为当一个 Action 被调度而一个已经调度的 Action 正在执行时,新调度的 Action 被排队。

关于RxJS 与 Scheduler.queue 和 null 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996986/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com