JKi*_*ian 6 javascript reactive-programming rxjs
我有两个RxJS科目,说a和b我需要以某种方式结合起来.
someComboOfAandB.subscribe({aVal, bVal} => console.log("value:", aVal, bVal));
Run Code Online (Sandbox Code Playgroud)
我希望将它们组合起来,以便if a和b同步更新,这些值一起传递:
a.next(1);
// some code
b.next(2)
// at end of synchronous code / frame:
// value: 1 2
Run Code Online (Sandbox Code Playgroud)
但是,如果只更新了一个值,则在推送具有两个新值的更新的同时仍将推送更新:
a.next(5)
// at end of synchronous code / frame:
// value: 5 2
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是的话,怎么样?即使有可能,它应该避免吗?
您应该能够使用 aScheduler来实现您想要的行为:
import "rxjs/add/observable/combineLatest";
import "rxjs/add/operator/map";
import { BehaviorSubject } from "rxjs/BehaviorSubject";
import { Observable } from "rxjs/Observable";
import { asap } from "rxjs/scheduler/asap";
let a = new BehaviorSubject(1);
let b = new BehaviorSubject(2);
let combined = Observable
.combineLatest(a, b, asap)
.map((values) => ({ aVal: values[0], bVal: values[1] }));
combined.subscribe(
({ aVal, bVal }) => { console.log("value:", aVal, bVal); }
);
a.next(3);
b.next(4);
Run Code Online (Sandbox Code Playgroud)
上面的代码将输出以下内容:
value: 3 4
Run Code Online (Sandbox Code Playgroud)
如果asap Scheduler未指定,则输出将为:
value: 1 2
value: 3 2
value: 3 4
Run Code Online (Sandbox Code Playgroud)
RxJS GitHub 存储库包含一些Scheduler文档。
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |