在Angular链接observable的最佳方法是什么?

Adr*_*and 4 rxjs angular

如果我有一个依赖于另一个服务调用结果的服务调用,那么链接它们的最佳方法是什么?

myService.getStuffFromServer().subscribe(data => {
  let manipulatedData = functionThatManipulatesData(data);
  myService.getMoreStuffFromServer(manipulatedData).subscribe(moreData => {
    doStuffWithMoreData(moreData);
  });
});
Run Code Online (Sandbox Code Playgroud)

是我一直在做的方式,但有时候嵌套有点乱.有更干净的方式吗?

Vam*_*shi 7

正如评论中提到的那样非常简单.

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的两个重要功能.希望我把你弄糊涂了:)