Является ли хорошей практикой испускание другого Observable из оператора finalize ()? - PullRequest
1 голос
/ 04 мая 2020

На самом деле хорошо ли выполнять другую наблюдаемую с собственной подпиской внутри оператора finalize()? Я знаю, что помещать это внутрь subscribe() не очень хорошая практика, которая приводит к утечке памяти, и т.д. c. В настоящее время я работаю с Firebase Storage API и пытаюсь загрузить изображение в базу данных, и возникает проблема, когда вы не можете получить правильный статус загрузки. Итак, я пытаюсь понять, когда я могу получить URL изображения из базы данных, когда в ответ количество переданных байтов равно общему количеству байтов. Но Firebase отвечает на это, что мое изображение еще не существует на сервере.

Так что я должен получить URL изображения в операторе finalize(). Это действительно хорошая идея?

Кроме того, можно сделать это с помощью debounceTime(), но я хочу, чтобы код был более четким и синхронным.

Кроме того, искал различные решения и нашел некоторые статьи, где авторы сделали то же самое

      this.storage.upload(filePath, this.selectedImage).snapshotChanges()
        .pipe(
          rxFilter(res => res.bytesTransferred === res.totalBytes),
          switchMap(res => this.storage.ref(filePath).getDownloadURL())
        )
        .subscribe(url => {
          console.log(url);
        });

1 Ответ

0 голосов
/ 04 мая 2020

Это определенно плохая практика, и ее не рекомендуется делать. Существует так много потенциальных недостатков и условий гонки, которые обычно обрабатываются Rx JS, что вам придется позаботиться самостоятельно. В зависимости от вашей проблемы есть разные способы сделать это. Я не понял всей проблемы, но похоже, что вы хотите / должны использовать switchMap или concat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...