Насколько понимаю, нельзя сделать шеллом реакт приложение, а вот ангуляр с его роутингом привязывать как микрофронт? То есть решение исключительно для ангуляр команд?
ПС почему Modul Federation? Вроде как Module Federation
Да, Reactive context | RxAngular (rx-angular.io) - решает последствия проблемы (показ ошибки), но не причину (падение сети и подписок), хотя с ней будет попроще. Мое решение будет в следующей статье
Нажмите Run OK - то что должно успешно загрузить пользователя. Подписчик ожидает получить в случае успеха 1 запись с профилем, но так как ангуляр вызывает комплит для хттп вызова, а materialize сконвертирует комплит в ещё один next, то подписчик получит 2 вызова next в сабскрайбе
Документацию я конечно же прочитал
RxJS: When the source Observable emits complete, the output Observable will emit next as a Notification of type "complete", and then it will emit complete as well.
Я не имею в виду, что materialize дублирует любой next источника. Я говорю о том что в связке с хттп клиентом Ангуляра он будет делать дубликаты.
Если вы все еще не понимаете почему materialize вызовет дважды next у подписчика Angular HttpClient то, наверное, действительно стоит закончить дискуссию.
Полагаю имелся в виду eitherify оператор? Потому что сама структура данных отличается фактически всем :)
materialize вообще используется крайне редко, но вот например семпл в чем его отличие от eitherify - вместо 5 next + 1 complete будет значительно больше. Основное отличие в документации - When the source Observable emits error, the output will emit next as a Notification of type "error", and then complete. То есть на каждую ошибку вы будете опять делать complete вместо продолжения потока. Кроме того, ответ будет изначально одинаковый для разных HttpErrorCode, в то время как eitherify каждый может подправить под себя исходя из того, какой код пришел - 400, 401, 403, 500
Этот подход и есть пример из статьи, который мне не нравится.
Он громоздкий как в темплейте, так и в коде
Его придется вручную проверять в случае, когда на основе первых данных придется делать вызовы для загрузки следующих - if (error) else
Придется постоянно держать в уме все случаи, когда надо менять флажки - тот же isLoading не может быть true в случае когда данные загружены, а модель это обычно позволяет.
Дополню только что данная статья только про важность ошибок и способа работы с ними, а вот структурная директива с поддержкой лоадинга и прочего будет в следующей статье
Это будет в следующей статье, и там для этого будет и новый контейнер, и другой компонент. Текст постараюсь сегодня подправить, чтобы переход был понятен.
Я спрашиваю потому что в полуоф репозитории такого семпла нет, видел только такой, без Ангуляра https://github.com/module-federation/module-federation-examples/tree/master/react-in-vue
Но класс если вы делали!
Насколько понимаю, нельзя сделать шеллом реакт приложение, а вот ангуляр с его роутингом привязывать как микрофронт? То есть решение исключительно для ангуляр команд?
ПС почему Modul Federation? Вроде как Module Federation
Да, Reactive context | RxAngular (rx-angular.io) - решает последствия проблемы (показ ошибки), но не причину (падение сети и подписок), хотя с ней будет попроще. Мое решение будет в следующей статье
На хорошем проекте такие вещи можно решить через кодогенератор на основе OpenApi схемы от бэкенда, используя например https://github.com/cyclosproject/ng-openapi-gen
Откройте ваше демо
Нажмите Run OK - то что должно успешно загрузить пользователя. Подписчик ожидает получить в случае успеха 1 запись с профилем, но так как ангуляр вызывает комплит для хттп вызова, а materialize сконвертирует комплит в ещё один next, то подписчик получит 2 вызова next в сабскрайбе
Документацию я конечно же прочитал
RxJS: When the source Observable emits
complete
, the output Observable will emitnext
as a Notification of type "complete", and then it will emitcomplete
as well.Angular: The full body has been received and delivered, no further events are possible. This request is complete.
Я не имею в виду, что materialize дублирует любой next источника. Я говорю о том что в связке с хттп клиентом Ангуляра он будет делать дубликаты.
Если вы все еще не понимаете почему materialize вызовет дважды next у подписчика Angular HttpClient то, наверное, действительно стоит закончить дискуссию.
Откройте свое демо, нажмите кнопку
Run ОК
и откройте консоль - будет два записи, а не одна.Потому что Ангуляр с HttpClient тоже вызывает
complete
- вот демо. Иmaterialize
вызывает два разаnext
, что совсем не то что нужно при подписке.Полагаю то, что вы эксперт mol, а не Angular.
Подсветка везде есть, насколько вижу, да и код у меня через редактор хабра получался больше по размеру, поэтому скриншоты.
Ссылки на рабочий код, который можно скопировать, также везде присутствуют.
Полагаю имелся в виду eitherify оператор? Потому что сама структура данных отличается фактически всем :)
materialize вообще используется крайне редко, но вот например семпл в чем его отличие от eitherify - вместо 5 next + 1 complete будет значительно больше. Основное отличие в документации - When the source Observable emits
error
, the output will emitnext
as a Notification of type "error", and thencomplete
. То есть на каждую ошибку вы будете опять делать complete вместо продолжения потока. Кроме того, ответ будет изначально одинаковый для разных HttpErrorCode, в то время как eitherify каждый может подправить под себя исходя из того, какой код пришел - 400, 401, 403, 500Ссылка на stackblitz
Этот подход и есть пример из статьи, который мне не нравится.
Он громоздкий как в темплейте, так и в коде
Его придется вручную проверять в случае, когда на основе первых данных придется делать вызовы для загрузки следующих - if (error) else
Придется постоянно держать в уме все случаи, когда надо менять флажки - тот же isLoading не может быть true в случае когда данные загружены, а модель это обычно позволяет.
Дополню только что данная статья только про важность ошибок и способа работы с ними, а вот структурная директива с поддержкой лоадинга и прочего будет в следующей статье
Это будет в следующей статье, и там для этого будет и новый контейнер, и другой компонент. Текст постараюсь сегодня подправить, чтобы переход был понятен.