Я хочу поговорить о том, что меня беспокоит. Я вижу много статей, в которых рассказывается о том, как решить проблему с несколькими HTTP-запросами при использовании асинхронного канала. Если вы не понимаете, о чем я говорю, позвольте освежить вашу память.

При работе с асинхронным конвейером и Observable вы можете столкнуться с ситуацией, когда у вас есть несколько HTTP-запросов. Например:

Как видите, мы отправляем на сервер три запроса. Это происходит потому, что наш Observable холодный, и каждое использование async pipe создает новое выполнение.

Текущее решение, которое предлагают люди:

Просто используйте оператор share, который вызывает внутренний вызов publish (). RefCount ().

Но тогда у вас будет такая ситуация с будущим подписчиком:

<p *ngIf=”show”>{{ (person | async)?.userId }}</p>

Что в этом случае share вам не поможет, и когда вы покажете элемент, сработает еще один HTTP-запрос. Итак, чтобы решить эту проблему, вам нужно использовать оператор publishReplay и вызвать метод connect.

В этот момент я спрашиваю себя:

Почему???? Это правильно делать ??

Если у вас есть одно событие, просто используйте обещание.

В большинстве случаев нам просто нужно ПОЛУЧИТЬ данные с сервера и отобразить их, и все готово.

Давайте исправим проблему с несколькими HTTP-запросами с помощью обещания:

Большой! Теперь не имеет значения, когда, как и почему вы всегда получаете последнее значение, не отправляя еще один HTTP-запрос.

Второе решение - не использовать асинхронный канал:

Заключение:

Rx - самая мощная библиотека, которую я знаю, когда дело касается асинхронных операций. Но не всегда нужно использовать Observables. Обещания все еще здесь, и их можно использовать, когда у вас есть одно событие, как мы видели в этой статье.

Это все!

Коснитесь или щелкните «︎ ❤» , чтобы помочь продвинуть этот фрагмент среди других.