169 похожих чатов

Подскажите, пожалуйста. Вот есть у меня несколько методов, которые с сервиса

http реквесты вызывают и делают внутри подписки разные манипуляции. Ну допутим, если ответ такой пришел, то потом делают что-то, распихивают данные по свойствам и т.д.
И эти методы сейчас вложены друг в друга для выполнения цепочкой (т.е. внутри одного сабскрайба А вызов следующего запроса Б, а внутри следующего С потом еще нескольких параллельных D, E, F).
Все работает. Но все выглядит неочевидно. В ngOninit вызывается первый только, а потом надо провалиться в него и увидеть второй и т.д.

Как можно красиво цепочкой вызвать все эти методы один за другим? Можно через mergeMap, но где же тогда я пропиш логику после выполнения каждого из них.

Сейчас это выглядит примерно так:

ngOnInit() {
this.isDataLoading = true;
this.getCurrentUser();
}

getCurrentUser() {
this.usersService
.getUser$()
.pipe(take(1))
.subscribe((response: UserInstance) => {
this.currentUser = response;

this.getUserAge; //1 параллельный запрос на сервер вложенный
this.getUserName; //2 параллельный запрос на сервер вложенный
});
}

getUserAge() {
this.usersService
.getAgeFromServer()

.subscribe((response) => {
this.currentUserAge = response;
if (this.currentUserAge > 18) {
this.getAlcoProducts() //1 вложенный запрос по условию
} else {
this.getToysProducts() //2 вложенный запрос по условию
}
});

//и т.д.
}

Ну короче все подписки выполняются одна внутри другой и с разной логикой (могут пойти разными путями запросы). Как красиво прописать вызов этих методов. Хотя бы тех, что идут по одном пути... Что для этого в ngRx / ангуляре используется?

6 ответов

8 просмотров

Не делайте сабскрайб в сабскрайбе. Используйте switchMap (+ forkJoin для параллельных запросов)

Oleksandr 🤖- Автор вопроса
Raman Yazvinski
Не делайте сабскрайб в сабскрайбе. Используйте swi...

вот) я и не хочу делать)) но через MergeMap что-то получается просто вызов одного за другим, а где же тогда прописать обработку полученных овтетов после каждого запроса...

Oleksandr 🤖- Автор вопроса
Raman Yazvinski
В свитчмапе и обработайте

т.е. выйдет громадная одна функция?

Oleksandr 🤖
т.е. выйдет громадная одна функция?

Так разбейте ее switchMap(result => { this.handleResult(); return this.nextRequest(result) })

Oleksandr 🤖- Автор вопроса
Raman Yazvinski
Так разбейте ее switchMap(result => { this.han...

да, все так просто) не хватило ума, что можно же в фигурных скобках все нужное поделать да и пойти дальше) Спасибо)

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
17
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
13
Карта сайта