我正在使用Angular和AngularFire2。我正在尝试将图像上传到Firebase存储,然后完成该操作,就可以获取该参考并获取下载URL并将其上传到数据库。出于某种原因,即使上传已完成并且有快照,当我尝试使用快照以获取URL时,也会出现错误消息,指出该对象不存在。对我可能做错的事情有任何想法吗?
task.snapshotChanges().pipe(
concatMap(snap => {
return snap.ref.getDownloadURL()
}),
concatMap(url => this.db.collection('library').add({
name: this.image.name,
path: path,
largeUrl: url
}))
).subscribe(ref => {
this.completed = true;
}, error => console.log(error));
错误:
Firebase Storage: Object 'library/1542515976022_lemonade-smoothie.jpg' does not exist.
答案 0 :(得分:1)
好的,所以我的问题不是真正了解concatMap。我认为直到上载Observable的最后onNext()
才被调用。它在第一个onNext()
上被调用,这意味着该文件尚未完全更新。下面是我最终要做的事情,尽管似乎应该有另一种方法。我只想在下载的字节等于总字节数的情况下切换到新的Observable轨道。我不确定如何用RxJS做到这一点。如果有人有任何想法,请告诉我。
task
.snapshotChanges()
.pipe(finalize(() => this.uploadToDb(path)))
.subscribe();
uploadToDb(path: string) {
this.storage
.ref(path)
.getDownloadURL()
.pipe(
concatMap(url =>
this.db.collection('library').add({
name: this.image.name,
path: path,
largeUrl: url
})
)
)
.subscribe(
ref => (this.completed = true),
error => {
console.log(error);
this.error = true;
}
);
}