- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 Angular2 应用程序,并且有两个 BehaviourSubjects
我想在逻辑上合并为一个订阅。我正在发出两个 http 请求,并希望在它们都返回时触发一个事件。我在看 forkJoin
对比 combineLatest
.似乎在更新任何一个 behvaviorSubjects 时 combineLatest 会触发,而 forkJoin 只会在所有 behavoirSubjects 更新后触发。这样对吗?必须有一个普遍接受的模式,不是吗?
编辑
这是我的 angular2 组件订阅的一个行为主题示例:
export class CpmService {
public cpmSubject: BehaviorSubject<Cpm[]>;
constructor(private _http: Http) {
this.cpmSubject = new BehaviorSubject<Cpm[]>(new Array<Cpm>());
}
getCpm(id: number): void {
let params: URLSearchParams = new URLSearchParams();
params.set('Id', id.toString());
this._http.get('a/Url/Here', { search: params })
.map(response => <Cpm>response.json())
.subscribe(_cpm => {
this.cpmSubject.subscribe(cpmList => {
//double check we dont already have the cpm in the observable, if we dont have it, push it and call next to propigate new cpmlist everywheres
if (! (cpmList.filter((cpm: Cpm) => cpm.id === _cpm.id).length > 0) ) {
cpmList.push(_cpm);
this.cpmSubject.next(cpmList);
}
})
});
}
}
this._cpmService.cpmSubject.subscribe(cpmList => {
doSomeWork();
});
最佳答案
您可以使用 zip
-operator,其工作方式与 combineLatest 或 forkJoin 类似,但仅在两个流都发出时触发:http://reactivex.io/documentation/operators/zip.htmlzip
的区别和 combineLatest
是:
Zip 只会“并行”触发,而 combineLatest
将随任何更新触发并发出每个流的最新值。
因此,假设以下 2 个流:
streamA => 1--2--3
streamB => 10-20-30
zip
:
combineLatest
:
const a = new Rx.Subject();
const b = new Rx.Subject();
Rx.Observable.zip(a,b)
.subscribe(x => console.log("zip: " + x.join(", ")));
Rx.Observable.combineLatest(a,b)
.subscribe(x => console.log("combineLatest: " + x.join(", ")));
a.next(1);
b.next(10);
a.next(2);
b.next(20);
a.next(3);
b.next(30);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
this._http.get('a/Url/Here', { search: params })
.map(response => <Cpm>response.json())
.withLatestFrom(this.cpmSubject)
.subscribe([_cpm, cpmList] => {
if (! (cpmList.filter((cpm: Cpm) => cpm.id === _cpm.id).length > 0) ) {
cpmList.push(_cpm);
this.cpmSubject.next(cpmList);
}
});
关于rxjs - 如何组合多个 rxjs BehaviourSubjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42840891/
我正在尝试模拟组件测试中的服务依赖项,该服务具有我试图模拟的行为主题属性。 我的服务如下: export class DatePickerService { public date: moment
我像这样创建BehaviorSubject: private val viewStateSubject: BehaviorSubject = BehaviorSubject.create() 后来我通
我正在使用 BehaviourSubject纯粹作为触发器,所以有效载荷并不重要。主题应该在订阅时“触发”(调用 next )(一个简单的 Subject 是行不通的!)。原则上有一个 Behavio
我正在构建一个 Angular2 应用程序,并且有两个 BehaviourSubjects我想在逻辑上合并为一个订阅。我正在发出两个 http 请求,并希望在它们都返回时触发一个事件。我在看 fork
我有 BehaviourSubject,我想用最后发出的值刷新项目。我可以在下面做例子, func refreshCurrent() { do { let items = t
我正在开发一项用户服务,通过用户的 user_id 跟踪用户。它首先检查 user_id 是否存在于他们的 cookie 中,如果不存在,它会向 api 发出获取请求以创建一个新的并在响应中返回 id
我正在尝试使用 Angular 服务通过可观察来存储和通信数据。 这是我的服务 public _currentLegal = new BehaviorSubject({ name: 'init',
我有一个带有 Angular 和 typescript 的简单表格。我将表数据从父类发送到子类(包括表),在此示例中数据名称是 _domainData。它正在正确获取数据,但我想在表上显示它,但我不知
我是 Rxjs 新手我正在尝试了解 BehaviourSubject下面是我的代码 export interface State { items: Items[] } const defaul
使用流构建器并将其流设置为 BehaviourSubject 的流,无论何时重建父窗口部件并调用 streamBuilder 的构建器函数,快照连接状态都在等待,尽管流中有以前的数据,但快照具有没有数
有一项服务用于读取初始持久值 - “settings”,并通过可观察的“settings$”将它们提供给订阅者 - 组件。多个组件使用“settings$”可观察值来检索初始持久值并进一步在它们之间交
我是 swift 和 rxSwfit 世界的新手,我正在寻求对当前解决方案的建议或批评,例如同步博客文章、类别、作者或我们需要的任何内容。 以这种经典情况为例:一个可观察量向每个订阅者提供模型中存在的
前几天我注意到了一些事情。我订阅了 @ngrx/effects 中的 Actions 流。我注意到(对我来说是一个问题)一个组件,它订阅 Actions 晚了,接收到最后一个调度的 Action 。我
因此,我有一个使用从服务中获取的数据填充的表,该服务器内的方法连接到 NodeJS API。 我尝试在我的服务上使用 BehaviourSubject,但我将其初始化为未定义,因为数据是从后端获取的:
当我测试我的代码时,我不小心遇到了意想不到的突变......或者也许......我只是做错了...... 用户 constructor( public id: number, public educa
目前我正在使用 RxKotlin 在 Kotlin 中构建一个项目。我的 Rx 背景主要基于 RxJS。 我经常用于在 Typescript 中创建热可观察对象的模式看起来类似于: private
我是一名优秀的程序员,十分优秀!