Как разграничить вызовы?

У меня есть входная функция `loadPage()` которая вызывается двумя способами: по инициализации компонента и по возникновению событий (subject).

Проблема в том - что сейчас в конструкторе вызывает loadPage() дефолтно + если приходят евены.

В этом случае отправляется несколько запросов. А должен быть один. Как разграничить вызов по умолчанию с вызовами от событий?

Мой код:

ngOnInit() {
        this.getPage();

        /* Событие вызывается при сбросе фильтра */

        this.eventsService.subjectFilterDistributionReset.subscribe((value) => {
            if (value) {
                this.paginationService.reset();
                this.loadPage();
            }
        });

        /* Событие вызывается при переходе с поиска */

        this.eventsService.searchFilterDistribution.pipe(filter((querySearch) => querySearch)).subscribe((querySearch) => {
            this.paginationService.setQuery(querySearch);
            this.paginationService.reset();
            this.loadPage();
        });

        /* Событие вызывается при фильтрации */

        this.eventsService.subjectFilterDistribution.pipe(filter((filterUrl) => filterUrl)).subscribe((filterUrl) => {
            const page = 1;
            this.paginationService.setFilterBy(filterUrl);
            this.paginationService.setCurrentPage(page);
            this.paginationService.calculateOffsetLimit(page);
            this.loadPage();
        });

        /* Событие вызывается при сортировке */

        this.eventsService.subjectSortingDistribution.pipe(filter(Boolean)).subscribe((sortedList: ListItem[]) => {
            this.paginationService.setSortBy(getSortingString(sortedList));
            this.loadPage();
        });
    }
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Не вызывать при ините никаких функций, а отправлять событие в сервис, который их слушает и делает запрос.
Тож самое с фильтрацией и поиском, все должно быть слито в один источник изменений запроса данных.
Ну и дебаунсить это все по времени плюс отменять предыдущий реквест, если требования изменились.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Гарда Технологии Нижний Новгород
от 100 000 ₽
Билайн (ВымпелКом) Новосибирск
от 120 000 до 160 000 ₽
Revealbot Казань
от 100 000 ₽
12 авг. 2020, в 23:54
25000 руб./за проект
12 авг. 2020, в 23:41
6000 руб./за проект
12 авг. 2020, в 20:48
10000 руб./за проект