【发布时间】:2021-09-30 20:31:27
【问题描述】:
我最近接手了一个 Angular 代码库,无法访问以前的开发人员,并且正在努力理解所使用的一些 RxJS。
目前有一个两步文件上传过程,我想基本上复制它以上传可流式视频。上传过程向接收表单数据的 API 发出请求以上传文件(现在是视频)。当前代码将初始文件上传请求与mergeMap 中每个文件的表单数据相结合,并向 S3 发出请求。这对文件很有用,但我似乎无法对视频进行同样的处理。
据我了解,我需要创建一种方法将数据从 map 运算符传递给两个自定义运算符,而不是一个。我曾尝试在mergeMap 中使用forkJoin 来组合进程,但在将数据从初始map 运算符传递到这两个函数时一直遇到问题。这是我的初始上传请求和自定义运算符的代码。
addItem(courseCode: string, unitId: string, formValue: AddItemFormValue) {
return this.courseApi.addItem(courseCode, unitId, body).pipe(
map(data => data.data),
this.makeFileUploadRequests(formValue),
// Trying to add: this.makeVideoUploadRequests(formValue)
);
}
private makeFileUploadRequests<T extends { files: { name: string; params: ServerModel.FileResponse }[] }>(formValue: {
files: UploadingFile[];
}) {
return mergeMap<T, Observable<ServerModel.FileUploadedResponse[] | T>>(data => {
return Array.isArray(data.files) && data.files.length > 0 ? this.uploadFiles(data.files, formValue.files) : of(data);
});
}
我认为造成这种混乱的部分原因是用于自定义运算符的语法。我已经为上传视频创建了一个类似的操作符,但是如何在确保来自map 的流被传递到两者的同时运行它们?
【问题讨论】:
标签: angular typescript amazon-s3 rxjs