Как использовать SSE с несколькими потоками в эффекте NGRX - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь подписаться на 2 события на стороне сервера внутри эффектов NGRX, затем объединить результаты в один объект и отправить полезную нагрузку в действии в хранилище.Я ссылаюсь на этот пост , но я не смог найти никаких примеров, как сделать это в рамках эффекта.

1) Как я могу создать (2)новые источники событий в моем эффекте как наблюдаемые

2) Как я могу объединить их в объект, чтобы каждый раз, когда мой сервер генерировал события, он ожидал, пока каждый из них не прибыл, а затем испускал новыезагрузить действие с этими значениями.Я изучил Forkjoin, MergeMap и Zip.Zip кажется лучшим на данный момент, так как вы можете подождать обеих наблюдаемых, но он все еще передает данные в массиве.

Это мой текущий процесс и псевдокод:

@Effect()
    getTraceData = this.actions$
        .ofType(appActions.GET_PLOT_DATA)
        .pipe(
            switchMap((action$: appActions.GetPlotDataAction) => {
                    // instead of http post, return two event sources
                    // new EventSource('/data1') + new EventSource('/data2')
                    return this.http.post(
                        `http://${this.url}/low-res-data`,
                        action$.payload.getJson(),
                        { responseType: 'json', observe: 'body', headers: this.headers });
            }),
            // not sure if I should use forkJoin or MergeMap
            // to make the data = { data1, data2}
            map((plotData) => {
                return {
                        type: appActions.LOAD_PLOT_DATA_SUCCESS,
                        payload: plotData
                }
            }),
        )
...