我使用this作为模板在ngrx中创建了一个简单的效果。我的代码略有不同:
`
@Effect()
addSeries$ = this.actions$
//Listen for the 'ADD_SERIES' action
.ofType(GraphsActions.ADD_SERIES)
//use that payload to construct a data query
.map(action => action.payload)
.switchMap(payload => this.http.get(/*making a url with payload here*/)
// If successful, dispatch success action with result
.map(res => ({ type: GraphsActions.SERIES_DATA, payload: res.json() }))
// If request fails, dispatch failed action
.catch(() => Observable.of({ type: 'FAILED' })));
`
在最终地图中,我希望有效载荷包含来自第一张地图的初始有效载荷的信息,如何实现?
我仍然在处理这些流媒体内容的工作方式时遇到了一些麻烦,所以如果有人能提供一个英文解释,说明这里发生的事情也会有所帮助。
答案 0 :(得分:4)
使用ngrx时,Effect
允许您在调度某些操作时触发副作用。
也就是说,一个简单的效果工作流程将是:
- 派遣FETCH_PERSON_DETAILS
(有效负载:{personId: string}
)。在reducer中,只需将布尔值isFetchingDetails
设置为true即可
这允许您在加载该人的详细信息时显示一个微调器(例如)
- 从效果中捕获该操作并启动HTTP请求以获取详细信息
- 获得响应后,使用响应中的数据发送FETCH_PERSON_DETAILS_SUCCESS
- 如果在获取数据时发生错误,请仅使用FETCH_PERSON_DETAILS_FAILED
(您可以在之前的personId
中找到)发送action.payload
在这里,您的问题只是代码缩进。 如果我们重新缩进它:
@Effect()
addSeries$ = this.actions$
.ofType(GraphsActions.ADD_SERIES)
.map(action => action.payload)
.switchMap(payload => this.http.get(/*making a url with payload here*/)
.map(res => ({ type: GraphsActions.SERIES_DATA, payload: res.json() }))
.catch(() => Observable.of({ type: 'FAILED' })));
我们可以看到map
已进入switchMap
。因此,从地图中,您可以访问switchMap
参数 - > payload
。
因此,为了获得前一个有效负载+响应的内容,您可以这样做:
.switchMap(payload => this.http.get(/*making a url with payload here*/)
.map(res => ({ type: GraphsActions.SERIES_DATA, payload: {action.payload, ...res.json()} }))
(或根据需要重新安排有效载荷)