Firebase 存储下载 url 上传后不可用

Firebase Storage download url not available after upload

我正在使用 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.

好的,所以我的问题不是真正理解 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;
        }
      );
  }