我在网上看了很多东西,却找不到能描述我问题的任何东西。
我当前正在使用Angular 5。
基本上,我想执行一个put
http请求,然后完成一些操作,然后再执行另一个get
http请求并执行更多操作。
这是我使用嵌套订阅的代码(我知道您不应该这样做):
this.projectService.updateProject(this.project).subscribe(
subscribe => {
doSomethingAfterTheUpdate();
this.projectService.get(this.id).subscribe(
subscribe => {
doSomethingAfterTheGet();
});
});
如您所见,我正在更新项目,然后获取项目。如何使用RxJS正确执行此操作。我已经研究了Concat和MergeMap方法,但是我想在更新和get之后都执行一些操作。
答案 0 :(得分:1)
您可能认为doSomethingAfterTheUpdate
有副作用,所以您可以这样做:
import { mergeMap, tap } from 'rxjs/operators';
this.projectService.updateProject(this.project).pipe(
tap(_ => this.doSomethingAfterTheUpdate()),
mergeMap(_ => this.projectService.get(this.id))
).subscribe(_ => this.doSomethingAfterTheGet());
请注意,我在某些管道操作上使用了_
,因为您实际上并没有使用范围值。
答案 1 :(得分:1)
您应该能够使用运算符tap和switchMap来实现此目的:
import { switchMap, tap } from 'rxjs/operators';
// ...
this.projectService.updateProject(this.project)
.pipe(
tap(() => doSomethingAfterTheUpdate()),
switchMap(() => this.projectService.get(this.id)),
tap(() => doSomethingAfterTheGet())
)
.subscribe(results => console.log(results));
希望有帮助!