最后更新:2020年5月。
CombineLatest(observables)
从reactX文档中:
每当任何Observable输入发出值时,它都会使用来自所有输入的最新值来计算公式,然后发出该公式的输出。
(更新:2020年5月)尽管另一个示例仍然有效,但这是一个新语法:
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
name$.combineLatest(document$, (name, document) => {name, document})
.subscribe(pair => {
this.name = pair.name;
this.document = pair.document;
this.showForm();
})
CombineLatest(observables)(替代语法):
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
combineLatest(name$, document$, (name, document) => ({name, document}))
.subscribe(pair => {
this.name = pair.name;
this.document = pair.document;
this.showForm();
})
拉链vs组合最新
(更新:2018年10月)
我以前建议使用zip
方法。但是,对于某些用例,combineLatest
与相比有一些优势zip
。因此,了解差异非常重要。
CombineLatest
从可观察对象发出最新的发出值。Whilezip
方法按顺序发射发射的项目。
例如,如果可观察的#1发出其第三项,而可观察的#2发出其第五项。使用zip
方法的结果将是两者的第三个发射值observables
。
在这种情况下,使用的结果combineLatest
将是5th和3rd。感觉更自然。
Observable.zip(observables)
(原始答案:2017年7月) Observable.zip方法在reactX文档中进行了解释:
组合多个Observable来创建一个Observable,其值是根据其每个输入Observable的值依次计算得出的。
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
Observable
.zip(name$, document$, (name: string, document: string) => ({name, document}))
.subscribe(pair => {
this.name = pair.name;
this.document = pair.document;
this.showForm();
})
旁注(适用于两种方法)
我们提供函数的最后一个参数(name: string, document: string) => ({name, document})
是可选的。您可以跳过它,或执行更复杂的操作:
如果最新参数是一个函数,则此函数用于从输入值中计算创建的值。否则,将返回输入值的数组。
因此,如果跳过最后一部分,则会得到一个数组:
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
Observable
.zip(name$, document$)
.subscribe(pair => {
this.name = pair['0'];
this.document = pair['1'];
this.showForm();
})