rxjs - RxJS从多个mergeMap中输出一个Subscription数组
问题描述
我想知道在进行多次mergeMap调用后是否可以输出一个可观察的数组
这是我想要回来的一个例子
this.kbSvc.create(kb).pipe(
map(dbKb => kb = dbKb),
mergeMap(() => this.goSvc.create(kb.id, "Build Market Share")),
mergeMap(go => this.marketSvc.create(kb.id, (<GrowthOpportunity>go).id, "Market Segment - TBD")),
mergeMap(ms => this.companySvc.create({ id: kb.id, msId: (<MarketSegment>ms).id }, "Company Type - TBD")),
).subscribe(([goSvc Result, marketSvc Result, companySvc Result]) => // //);
上面的所有调用都相互依赖,因为我无法使用forkJoin
。换句话说,我之前的 observable 必须在调用新的 observable 之前完成。
我试图避免多次map
调用 avfermergeMap
并存储每个可观察到的结果值。
谢谢!
解决方案
到目前为止,我遇到的运算符不会保持接收或发出的值的状态。就像水流一样,他们只是在修改他们希望的方式后让数据流动。
一种解决方案是通过嵌套管道运算符,因此您仍然可以访问以前运算符的数据。
为了清楚起见,让我们在函数下定义所有可观察的。
goFunc(id) {
return this.goSvc.create(id, "Build Market Share");
}
marketFunc(id, goData) {
return this.marketSvc.create(id, (<GrowthOpportunity>goData).id, "Market Segment - TBD");
}
companyFunc(id, msData) {
return this.companySvc.create({ id: id, msId: (<MarketSegment>msData).id }, "Company Type - TBD");
}
这是嵌套管道的功能,
someFunc() {
this.kbSvc.create(kb).pipe(
mergeMap(kb => this.goFunc(kb).pipe(
mergeMap(goData => this.marketFunc(kb,goData).pipe(
mergeMap(msData => this.companyFunc(kb,msData).pipe(
map((companyData) => [goData,msData,companyData])
)),
))
))
).subscribe(data => {
//data will have [goData,msData,companyData]
console.log(data);
});
}
这应该给出预期的输出。
推荐阅读
- spss - 从 SPSS 的调查中删除“IDK”以进行基本分析是否更合理?
- php - 每次在 PHP 中调用函数时,如何返回一个构建新表行的字符串?
- json - Type '_' has no member 'id' SwiftUI
- javascript - 如何从每种类型的单独数组切换到具有所有值的单个数组?
- bash - 尝试在 BASH 脚本中指定发件人地址 - 遇到 mailx: 非法选项 - r 错误
- symmetricds - 主数据库是否需要位于运行 symmetricds 的同一主机中?
- nosql - 有没有办法在 FaunaDB + GraphQL 上设置字段级授权?
- google-cloud-platform - Google automl 使用一个帐户进行训练并使用另一个帐户执行翻译?
- html - 获取与 CSS 中的标题在同一行的段落
- css - `ng-scope` 类导致 UI 出现问题