【发布时间】:2019-03-13 12:10:59
【问题描述】:
我的服务中有以下功能:
getFiles(): Observable<File[]> {
const makeFiles = map((response: FileResponse[]): File[] => {
return response.map((fileResponse: FileResponse): File => {
return File.fromResponse(fileResponse);
});
});
return this.httpService.get('/profile/files').pipe(
makeFiles,
shareReplay(),
);
}
getFileUri(filename: string): Observable<SafeUrl> {
return this.httpService.get(`/profile/file/uri/${filename}`).pipe(
mergeMap((uri: string) => this.httpService.get(uri, {}, { useUrlAsItIs: true, responseType: 'arraybuffer' })),
map((fileBuffer: any) => {
const unsafeUrl = URL.createObjectURL(new Blob([fileBuffer], {type: 'application/binary'}));
const safeUrl = this.sanitizer.bypassSecurityTrustUrl(unsafeUrl);
return safeUrl;
})
);
}
如您所见,getFiles 返回 File Array 的 Observable,getFileUri 接受文件名(File 类的属性)并返回 Observable。
我想做的是,结合这两个功能。这意味着, getFiles() 仍应返回 Observable<File[]> 并且数组中的每个 File 都应具有 safeUrl 属性。
我的问题是,我真的不知道怎么做这个复杂的任务。
谢谢!
【问题讨论】:
-
你应该检查 rxjs 的combineLatest。