Привет!
Я создаю функцию, в которой я хочу вернуть URL загрузки, предоставленный angular хранилищем после загрузки файла, я должен сделать некоторые проверки перед фактической загрузкой файл, так как эти проверки будут включать подписку на множество наблюдаемых, я скорее подключаю операторы, чтобы избежать утечек памяти.
Сейчас мой (частичный) код выглядит так:
return this.getTemporaryDoc(docRoute).pipe(switchMap(
(data => {
if (data === undefined || data === null || !data) {
this.task = this.storage.upload(fileRoute, file);
const fileRef = this.storage.ref(fileRoute);
return this.task.snapshotChanges().pipe(
filter(snap => snap.bytesTransferred === snap.totalBytes),
switchMap(() => {
return timer(500).pipe(switchMap(() => {
return fileRef.getDownloadURL().pipe(map((url => {
this.navigation.loader.next(false);
return this.createResponse(0, url);
})));
}));
}));
Мой код работает, но я не думаю, что это чистое решение, так как я использую таймер. Причина таймера в том, что если его не использовать, fileRef.getDownloadURL () вернет ошибку 404.
storage/object-not-found
Это особенно происходит с очень большими файлами, есть ли другое решение для этого? Тот, где мне не нужно использовать таймер и быть уверенным, что файл создан правильно? Заранее спасибо!
PD Остерегайтесь того, что представленный код - это лишь малая его часть