在 Angular 中,如何将 post 请求的响应作为参数之一传递给另一个 post 请求?

In Angular how can I pass the response of my post request as one of the parameters to go into another post request?

我有一个包含两个部分的表单,它分派两个 post 请求操作,第二个请求需要第一个请求的参数才能成功发送。但我不确定如何 :( 我有第一个动作的请求和响应工作正常但我只是不确定如何或在哪里实现逻辑 - 它应该在服务中吗?一个减速器?我试过 forkjoin 然后意识到我不知道自己在做什么。在此先感谢您的帮助!

我的组件:


    const newArtist = this.store.dispatch(new CreateArtist({
      ...generalDetails,
      hometown,
    }))

    const newArtistExtraInfo = this.store.dispatch(new CreateDiscography({
      ...songCatalogue
    }
    ));

    forkJoin([newArtist, newArtistExtraInfo]).subscribe(result => {
      console.log(`the results are in : ${result}`)
    }) 

在这种情况下,您可以使用 RxJS switchMap 运算符传入第二个请求。尝试以下

firstRequest().pipe(
  switchMap(responseFirst => secondRequest(responseFirst)),
  catchError(errorFirst => of(errorFirst))
).subscribe(
  responseSecond => { },
  errorSecond => { }
);

现在第一个请求将完成,它的响应将用作第二个请求的参数。还有其他高阶映射运算符,如 mergeMapconcatMapexhaustMap 用于特定目的。

为此,您需要扩展处理 CreateArtist 的效果以分派另一个动作。

ofType(actions.CreateArtist),
switchMap(action => this.http.get('url1')),
// this action goes to effects again to its own handler.
map(response => new CreateDiscography(someParams)),

如果您想使用第一个动作的结果,那么您很可能想在处理 CreateArtist 之后读取更新后的状态。

在您的组件中,您可以使用 Selector returns 最近创建的艺术家,这是由 ArtistState 处理 CreateArtist 产生的:

@Select(ArtistState.latestArtist) artist$: Observable<Artist>;

this.store.dispatch(new CreateArtist(..))
.pipe(
   withLatestFrom(this.artist$)
)
.subscribe(([_, artistInfo]) => {
  this.store.dispatch(new CreateDiscography({ .., artistInfo.token, artistInfo.id });
})

因此,您在这里调度创建艺术家操作,然后读取创建后的状态以获取您需要调度后续唱片操作的艺术家特定信息。

另一种选择是您的状态作为包含您之后的 token/id 的 ArtistCreated 动作进行调度,并且您的组件通过动作流订阅它,然后它可以在其中调度唱片动作。