如何在NGRX效果中将SSE与多个流一起使用

时间:2018-09-17 20:52:45

标签: angular rxjs ngrx server-sent-events ngrx-effects

我正在尝试在NGRX效果中订阅2个服务器端事件,然后将结果合并到单个对象中,然后将操作中的有效负载分派到存储中。我引用的是this post,但我无法找到在效果内执行此操作的任何示例。

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
                }
            }),
        )

0 个答案:

没有答案