AngularFire存储列表所有构建的promise和forkjoin数组



我正在寻找一只手来创建一个promise数组,并使用RXJS forkjoin执行它们以构建结果集。

我正在使用AngularFire的存储模块将所有上传的文件返回到指定的位置,如下所示:

getFileList(folderTree: string, folderName: string) {
const filePath = folderTree + '/' + folderName;
const fileRef = this.storage.ref(filePath);
return fileRef.listAll();
}

订阅以上内容:

this.filesService
.getFileList(this.folderTree, this.folderName)
.subscribe((result) => {
//do stuff
});

其结果是ListResultCompat对象,该对象包含一个名为"items"的数组,该数组包含ReferenceCompat对象。每个ReferenceCompat对象都有一个名为"getDownloadURL"的方法,该方法返回一个用URL解析的promise。我想将这些承诺转化为可观察性,然后分叉连接它们来创建下载URL的最终数组,但用RXJS"of"转换为可观察性的普通方法并没有像我预期的那样。很明显我错过了什么。

如果我执行以下操作:

this.filesService
.getFileList(this.folderTree, this.folderName)
.subscribe((result) => {
this.files = result.items.map((file) => of(file.getDownloadURL()));
//do stuff
});

如上所述,生成了一组可观测值,但当我分叉连接它们时,它们并没有像我希望的那样解析。执行此操作:

this.filesService
.getFileList(this.folderTree, this.folderName)
.subscribe((result) => {
this.files = result.items.map((file) => of(file.getDownloadURL()));
forkJoin(this.files).subscribe((data) => {
//want data to be the resolved promises so I can map out the URLs
});
});

结果是一个ZonewarePromise对象数组,该对象使用名为"__zone_symbol__value"的属性进行解析,该属性包含我要查找的URL,但我希望这些promise作为forkjoin的一部分进行解析,并且能够映射出URL值。

只是不确定我错过了哪一步。

如果它们是Promises,则应该使用from而不是of。

最新更新