我一直试图找到这个答案,但是作为RxJS和Angular(2+)的新人,我正在寻找一种方法来组合两个HTTP GET调用的结果.一旦完成一个呼叫,就必须根据该结果进行新的呼叫.第一次通话的结果将与第二次通话合并.优选地,在具有对象类型的属性中.
我一直在玩mergeMap,switchMap和concatMap.根据文档和指南,这些功能应该做我想要实现的目标.但是怎么样?
在我的例子中,我有一个ID(例如3).这是我的代码:
this.postsService.getPostData(postId)
.switchMap(
postData => Observable.forkJoin(this.getUserByPostData(postData))
)
.subscribe( result => console.log(result) );
Run Code Online (Sandbox Code Playgroud)
两个函数(getPostData和getUserByPostData)都将返回Observableshttp.get
在这种情况下,特别是由于forkJoin,我希望我的结果合并.但是,我检索的结果已经完全替换为第二个请求的结果(这是switchMap函数中的一个).
我怎样才能将结果合并?是否也可以将第二个HTTP request(this.getUserByPostData)的结果作为第一个请求结果的属性推送?
如果第二请求从第一请求的响应取决于数据,如果你想将两种反应相结合,可以使用map中操作switchMap:
this.postsService.getPostData(postId).switchMap(
postData => this.getUserByPostData(postData).map(
userByPostData => ({ postData, userByPostData })
)
).subscribe(({ postData, userByPostData })=> console.log(postData, userByPostData));
Run Code Online (Sandbox Code Playgroud)
另外,如果可观察到的由返回的getPostData是基于HTTP的,它只会发出过一次,所以绝不会有任何需要切换.你可以使用mergeMap,而不是.
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |