Home > Mobile >  Send separate requests instead of one whole in Angular
Send separate requests instead of one whole in Angular

Time:10-26

I want to modify this function to send these two file ids in the separate requests:

return this.upload(myForm).pipe(
  take(1),
  switchMap(res => {
    body.user.profilePic = res.data.profilePic;
    body.user.coverPic = res.data.coverPic;

    return this.http.post<IRresponse<object>>(environment.api   EndPoint.CreateUser, body);
})
);

Should I use flatmap?

CodePudding user response:

You can do separate requests from one pipe like that:

return this.upload(myForm).pipe(
  take(1),
  switchMap(res => {
    body.user.profilePic = res.data.profilePic;
    body.user.coverPic = res.data.coverPic;

    return [
      this.http.post<IRresponse<object>>(environment.api   EndPoint.CreateUser, body),
      this.http.post<IRresponse<object>>(environment.api   EndPoint.CreateUser, body),
    ]
  }),
  mergeAll(),
);

CodePudding user response:

The right operator depends on whether you want to send the two request in parallel or consecutively.

If you already have take(1) then you can use both switchMap or mergeMap because it will always emit only once and thus it doesn't matter in this case.

Sending requests in parallel:

return this.upload(myForm).pipe(
  take(1),
  switchMap(res => {
    ...
    return forkJoin([
      this.http.post<IRresponse<object>>(environment.api   EndPoint.CreateUser, body),
      this.http.post<IRresponse<object>>(environment.api   EndPoint.CreateUser, body),
    ]);
  }),
);

Sending requests in sequence:

return this.upload(myForm).pipe(
  take(1),
  switchMap(res => {
    ...
    return concat(
      this.http.post<IRresponse<object>>(environment.api   EndPoint.CreateUser, body),
      this.http.post<IRresponse<object>>(environment.api   EndPoint.CreateUser, body),
    );
  }),
);
  • Related