Angular с angularfire2 - getDownloadURL () иногда не работает. Это из-за асинхронности - PullRequest
0 голосов
/ 04 марта 2020

GET https://firebasestorage.googleapis.com/xxxxx/o/hw04.docx 404 ссылка для загрузки firebase err t {code_: «хранилище / объект не найден», message_: «хранилище Firebase: объект 'hw04.docx' не существует.", serverResponse_: "{↵" error ": {↵" code ": 404, ↵" message ":" No… not get object ", ↵" status ":" GET_OBJECT "↵} ↵}", name_: "FirebaseError"}

Вот мой фрагмент кода для того же.

upload(event) {
    const file = event.target.files[0];
    this.randomId = file.name;
    this.ref = this.afStorage.ref(this.randomId);
      this.task = this.ref.put(file);
      this.uploadProgress = this.task.percentageChanges();
      console.log("before pipe",this.task);
      this.ref.getDownloadURL().subscribe((url) => {
          console.log("link", url)
          this.downloadURL = url;
        },
        err => {
            console.log("firebase download link err", err);
        })
    }
}

Он работает нормально, как 60% времени, в противном случае он даст 404 ссылка для скачивания err .

Есть ли лучший способ справиться с этим асинхронным c ответом?

Пожалуйста, помогите мне!

Спасибо,

1 Ответ

0 голосов
/ 04 марта 2020

Рассмотрите возможность использования метода finalize из rx js:

task.snapshotChanges().pipe(
    finalize(() => this.downloadURL = fileRef.getDownloadURL() )
 )
.subscribe()

Он установит URL-адрес загрузки после завершения загрузки.

...