我正在研究@ngrx / effects库,他们有一些示例代码
__extern int caca_conio_getch (void)
我的问题出在@Effect() login$ = this.actions$
// Listen for the 'LOGIN' action
.ofType('LOGIN')
// Map the payload into JSON to use as the request body
.map(action => JSON.stringify(action.payload))
.switchMap(payload => this.http.post('/auth', payload)
// If successful, dispatch success action with result
.map(res => ({ type: 'LOGIN_SUCCESS', payload: res.json() }))
// If request fails, dispatch failed action
.catch(() => Observable.of({ type: 'LOGIN_FAILED' }))
);
调用中,作者选择在该调用中处理该可观察对象。
为什么他们不会选择利用switchMap
的“扁平化”并执行以下操作:
switchMap
请注意,此重构@Effect() login$ = this.actions$
// Listen for the 'LOGIN' action
.ofType('LOGIN')
// Map the payload into JSON to use as the request body
.map(action => JSON.stringify(action.payload))
.switchMap(payload => this.http.post('/auth', payload))
// If successful, dispatch success action with result
.map(res => ({ type: 'LOGIN_SUCCESS', payload: res.json() }))
// If request fails, dispatch failed action
.catch(() => Observable.of({ type: 'LOGIN_FAILED' }))
);
如何仅从switchMap
返回observable。
答案 0 :(得分:2)
映射在两种情况下都会得到相同的结果,但是情况1中的catch会捕获仅http.post的错误,而case 2将处理任何observable中的错误。