如果我有一个依赖于另一个服务调用结果的服务调用,那么链接它们的最佳方法是什么?
myService.getStuffFromServer().subscribe(data => {
let manipulatedData = functionThatManipulatesData(data);
myService.getMoreStuffFromServer(manipulatedData).subscribe(moreData => {
doStuffWithMoreData(moreData);
});
});
Run Code Online (Sandbox Code Playgroud)
是我一直在做的方式,但有时候嵌套有点乱.有更干净的方式吗?
正如评论中提到的那样非常简单.
myService.getStuffFromServer().
.map(functionThatManipulatesData)
.flatMap(manipulatedData => myService.getMoreStuffFromServer(manipulatedData))
.subscribe(moreData => {
doStuffWithMoreData(moreData);
});
Run Code Online (Sandbox Code Playgroud)
map将流的每个元素从一种数据转换为另一种数据.但是,如果该转换涉及我们使用的异步调用flatMap.
我能描述的最简单的方法,这种想法对我帮助很大.
我们还可以使用flatMap向流中添加多个项目.例如,map采用一个项目并用新项目替换它.如果我们想要一个项目并在其位置添加3个项目该怎么办?例如,我想用方形和立方体替换数字.
----1---2---3---
Run Code Online (Sandbox Code Playgroud)
至
----1---1---1---2---4---8---3---9---27----
Run Code Online (Sandbox Code Playgroud)
然后我们可以使用 flatMap
stream.flatMap(num => Observable.of(num, num*num, num*num*num));
Run Code Online (Sandbox Code Playgroud)
现在,flatMap用三个新元素替换每个元素.这是flatmap的两个重要功能.希望我把你弄糊涂了:)
| 归档时间: |
|
| 查看次数: |
2783 次 |
| 最近记录: |