Angular Загрузка хранилища Firebase - PullRequest
0 голосов
/ 05 января 2020

Доброе утро! У меня проблема с моей функцией :( Сначала я помещаю свой файл img в хранилище Firebase следующим образом:

  pushMaintoStorage(fileUpload: File, progress: {percentage: number}, path) {
    const storageRef = firebase.storage().ref();
    const uploadTask = storageRef.child(`${'/' + path}/${0 + '.png'}`).put(fileUpload);
    uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED,
      (snapshot) => {
        // in progress
        const snap = snapshot as firebase.storage.UploadTaskSnapshot;
        progress.percentage = Math.round((snap.bytesTransferred / snap.totalBytes) * 100);
      },
      (error) => {
        // fail
        console.log(error);
      },
      () => {
        this.saveFileData(fileUpload, path);
      });
  }

Затем я хотел бы получить URL-адрес загруженного файла и установить его. в качестве значения формы. После этого я хочу создать свой новый объект, который будет иметь этот URL-адрес в качестве значения 'imgUrl'. Все работает хорошо, используя хорошую сеть inte rnet. Когда я пытаюсь проверить его на более медленном сетевом соединении, как Константное хранилище 'Fast3G' возвращает ошибку, потому что сеть не успевает загрузить этот файл, прежде чем функция захочет его получить ...

  GetImage(id: number) {
    const storage = firebase.storage().ref().child('' + id + '/0.png');
      storage.getDownloadURL().then(url => {
        if (!url) {
          return false;
          }
        this.form.controls['mainImg'].setValue(url.toString());
        this.db.addCar(this.form.value)
          .then(this.SuccesCreate.bind(this), this.ErrorCreate.bind(this));
      });
  }

Может ли кто-нибудь помочь мне, как дождаться этого значения? Я пытался установить setTimeout но это не профессиональное решение ... Должен ли я использовать l oop для проверки доступности этого пути хранения?

, это мой метод создания Car, но здесь все должно быть хорошо. Проблема с методом GetImage .

  createCar(): void {
    const id_cor = this.carse.map((car) => car.id)
      .reduce((prev, current) => {
        return (prev > current) ? prev : current;
      });
    this.carsservice.pushMaintoStorage(this.oneSelectedFile, this.progress, id_cor + 1);
    this.carsservice.pushFileToStorage(this.selectedFiles, this.progress, id_cor + 1);
    this.form.controls['id'].setValue(id_cor + 1);
    this.form.controls['start_date'].setValue(+new Date());
    this.GetImage(id_cor + 1);
  }
...