【问题标题】:RxJS mergeMap: Inner Observable does not get executedRxJS mergeMap:内部 Observable 没有被执行
【发布时间】:2022-08-06 03:44:05
【问题描述】:

我想上传多个文件。在上传之前,我需要发布一个返回 personId 的请求,以便我可以将此 personId 链接到后端的上传文件。

postOnboardingRequestDto$ 创建一条记录,但未保存文件。 postSingleFormData$ 未执行。任何帮助或指向正确方向将不胜感激。

postOnboardingRequestDto$ = (onboardingRequestDto) => this.onboardingService.postOnboardingRequestDto(onboardingRequestDto);
postSingleFormData$ = (personId, formData) => this.httpClient.post<SaveResponse>(`/v2/api/onboarding/person/${personId}/document/DOCUMENT_TYPE`, formData);


  confirmOnboardingRequest() {
    this.onboardingRequestIsSubmitted = true;

    this.postOnboardingRequestDto$(this.onboardingRequestDto).pipe(
      mergeMap((onboardingRequestDto) => from(this.selectedFiles).pipe(
          map(file => {
            console.log(`file - ${file.name}`);
            const formData = new FormData();
            formData.append(file.name, file);
            this.postSingleFormData$(onboardingRequestDto.onboardingPersonId, formData);
          })
        )
      )
    ).subscribe((res) => console.log(`res ${JSON.stringify(res)}`));

  }
  • 它不受流管道的约束。您应该使用管道处理它并使用 mergeMap 绑定到流
  • 尝试订阅它。对于所有 HttpClient 方法,该方法不会开始其 HTTP 请求,直到您在该方法返回的 observable 上调用 subscribe()。
  • @derstauner,您不应该在管道内进行订阅。那是个坏习惯
  • 您没有从地图中返回任何内容,这可能是第一个问题
  • postSingleFormData$() 从未订阅过

标签: angular rxjs mergemap


【解决方案1】:

这对你有用吗?

confirmOnboardingRequest() {
  this.onboardingRequestIsSubmitted = true;

  this.postOnboardingRequestDto$(this.onboardingRequestDto).pipe(
    mergeMap((onboardingRequestDto) =>
      from(this.selectedFiles).pipe(
        map(file => new FormData().append(file.name, file)),
        mergeMap(formData => this.postSingleFormData$(onboardingRequestDto.onboardingPersonId, formData))
      )
    )
  ).subscribe((res) => console.log(`res ${JSON.stringify(res)}`));
}

【讨论】:

  • 太棒了@Sanjo21。乐意效劳。请标记为已解决。
  • 我是否需要采取进一步措施将其标记为已解决?
  • 您只需将答案标记为正确(绿色检查图像)。
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 2012-04-19
  • 2022-07-11
  • 2019-09-07
  • 2021-03-25
  • 1970-01-01
  • 2020-09-23
相关资源
最近更新 更多