在我的应用程序中,我有类似的东西:
this._personService.getName(id)
.concat(this._documentService.getDocument())
.subscribe((response) => {
console.log(response)
this.showForm()
});
//Output:
// [getnameResult]
// [getDocumentResult]
// I want:
// [getnameResult][getDocumentResult]
然后我得到两个分开的结果,第一个是 _personService
,然后是 _documentService
。我如何才能在调用 this.showForm()
之前等待两个结果完成然后操作每个结果。
原文由 gog 发布,翻译遵循 CC BY-SA 4.0 许可协议
最后更新:2022 年 3 月。
RxJS v7:结合最新与
来自 reactX 文档:
(已弃用)RxJS v6 combineLatest()
来自 reactX 文档:
(更新:2021 年 2 月) :
(替代语法) : combineLatest(observables)
zip vs combine最新
(更新:2018 年 10 月) 我之前建议使用
zip
方法。但是,对于某些用例,combineLatest
比zip
--- 有一些优势。因此了解差异很重要。CombineLatest
从 observables 发出最新的发射值。而zip
方法 按顺序 发出发出的项目。例如,如果 observable #1 发出了它的 第 3 个 项目,而 observable #2 发出了它的 第 5 个 项目。使用
zip
方法的结果将是observables
的 第三个 发射值。在这种情况下,使用
combineLatest
的结果将是第 5 和 第 3 。感觉更自然。Observable.zip(可观察)
(原始答案:2017 年 7 月) Observable.zip 方法在 reactiveX 文档 中有说明:
旁注(适用于两种方法)
我们提供函数的最后一个参数
(name: string, document: string) => ({name, document})
是可选的。你可以跳过它,或者做更复杂的操作:所以如果你跳过最后一部分,你会得到一个数组: