Я строю проект, используя Firestore, и я застрял с одной частью. Я создал сервис для загрузки файла, который отлично работает, и я использую pipe
с last()
и concatMap
, чтобы вернуть getDownloadURL()
из Firestore.
У меня проблема в том, что это наблюдаемое, я не могу получить это значение и присвоить объекту, который я создаю, для отправки в БД. Кто-нибудь может мне помочь с этим.
Вот файлы:
export class AddComponent {
uploadPercentage: Observable<number>;
logoURL: Observable<string>;
onLogoChanged(event) {
this.venueID = this.venueService.createID();
const logo: File = event.target.files[0];
const path = 'venues/logo/' + this.venueID + '/' + logo.name;
const task = this.uploadService.uploadFile(logo, path);
this.uploadPercentage = task.percentageChanges();
this.logoURL = task.snapshotChanges().pipe(
last(),
concatMap(() => task.task.snapshot.ref.storage.ref(path).getDownloadURL())
);
}
onFormSubmit() {
const venueObject = { creationDate: Date.now(), isVerified: false, logo: this.logoURL, ...this.venueForm.value };
console.log(venueObject);
this.venueService.createNewVenue(venueObject)
.then(
() => {
this.dismiss();
this.venueForm.reset();
},
(e) => console.error(e)
);
}
}
upload.service.ts
export class UploadService {
uploadPercent: Observable<number>;
constructor(private uploadDB: AngularFireStorage) {}
uploadFile(file: File, path: string) {
return this.uploadDB.upload(path, file);
}
}