Доброе утро! У меня проблема с моей функцией :( Сначала я помещаю свой файл 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);
}