合并两个RxJS流(基于同步)
Combine two RxJS streams (based on synchrony)
我有两个RxJS主题,说a
和b
,我需要以某种方式组合。
someComboOfAandB.subscribe({aVal, bVal} => console.log("value:", aVal, bVal));
我想把它们组合起来,这样如果a
和b
同步更新,值就会一起传递:
a.next(1);
// some code
b.next(2)
// at end of synchronous code / frame:
// value: 1 2
但是,如果只更新了一个值,则仍然会推送一个更新,同时会推送一个包含两个新值的更新:
a.next(5)
// at end of synchronous code / frame:
// value: 5 2
这可能吗?如果是,又是怎样的呢?即使有可能,这是应该避免的吗?
您应该能够使用Scheduler
来实现您想要的行为:
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);
以上代码将输出如下内容:
value: 3 4
如果没有指定asap
Scheduler
,输出将是:
value: 1 2
value: 3 2
value: 3 4
RxJS GitHub repo包含一些Scheduler
文档
相关文章:
- 在控制器和数据对象之间同步数据
- 同步调用,直到用户通过angular验证为访问者
- javascript函数同步
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 音频和动画在javasctipt循环中同步
- 主线程上的同步XMLHttpRequest已弃用
- 主干网.与Safari同步问题
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 是否同步加载了LINK元素
- 异步获取数据使用JavaScript同步获取数据
- 以同步方式获取Javascript Promise的值
- 同步同步和本地 chrome.storage
- 如何同步声明JS对象,然后用依赖于并发操作的数据编辑对象的属性
- 是否有一个JavaScript/css的方法,使同步滚动区域类似于"meld"
- 相当于同步JS中的XMLHttpRequest超时
- 纠结于node.js中的异步同步
- 如何同步依赖于多个ajax请求响应的javascript代码
- XMLhttpRequest for PDF 文件适用于同步,但不适用于异步