Как передать несколько значений через цепочку операторов оператору карты?В эффекте NgRx - PullRequest
0 голосов
/ 29 сентября 2019

Я работаю над Effect, в котором я загружаю новые данные из конечной точки REST, а затем отправляю действие, чтобы обновить хранилище с полученными данными.Вместе с составлением searchUrl, есть некоторые вычисления newCurrentPage.

Как передать значение newCurrentPage вместе с поисковым запросом в следующие операторы?

Код выглядит следующим образом:

@Effect()
tablePageChanged = this.actions$
    .pipe(
        ofType(action.tablePageChanged ),
        withLatestFrom(this.store.select('tableData')),
        switchMap(([action, tableData]) => {

            let newCurrentPage: number;
            let searchUrl: string;

            switch (action.navPage) {

                case NavigationPage.First:
                    newCurrentPage = 1;
                    searchUrl = tableData.devsTable.firstUrl;
                    break;

                case NavigationPage.Previous:
                    newCurrentPage = tableData.devsTable.currentPage - 1;
                    searchUrl = tableData.devsTable.previousUrl;
                    break;

                case NavigationPage.Next:
                    newCurrentPage = tableData.devsTable.currentPage + 1;
                    searchUrl = tableData.devsTable.nextUrl;
                    break;

                case NavigationPage.Last:
                    newCurrentPage = Math.ceil(tableData.devsTable.totalRecords / tableData.devsTable.pageSize);
                    searchUrl = tableData.devsTable.lastUrl;
                    break;

                default:
                    break;
            }

            // HERE: I want to return also 'newCurrentPage', so that I can pass it to 'handleSuccessfulResponse' later
            return this.http.get<UserSearchResponse>(searchUrl, {observe: 'response'});
        }),
        withLatestFrom(this.store.select('tableData')),
        map(([response, tableData]) => {

            // HERE: I want to get 'newCurrentPage' to pass it to the 'handleSuccessfulResponse' function
            return this.handleSuccessfulResponse(response, tableData);
        })
    );

Эта вещь RxJS является совершенно новой дляя, и я еще не совсем обернул голову вокруг этого, поэтому, пожалуйста, будьте откровенны.Спасибо!

1 Ответ

1 голос
/ 29 сентября 2019

Вы можете переместить операторы в замыкание, где были определены эти переменные, например:

switchMap(([action, tableData]) => {
  // ...
  return this.http.get<UserSearchResponse>(searchUrl, {observe: 'response'}).pipe(
    // `tableData` and `newCurrentPage` is available here
    map(response => this.handleSuccessfulResponse(response, tableData))
  );
})

Или используйте оператор map, чтобы вернуть пару [response, newCurrentPage], чтобы ее можно было использовать позже

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