@ ngrx / effects为什么会使用嵌套的observable

时间:2018-02-20 04:33:16

标签: javascript observable angular5 ngrx-effects

我正在研究@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。

1 个答案:

答案 0 :(得分:2)

映射在两种情况下都会得到相同的结果,但是情况1中的catch会捕获仅http.post的错误,而case 2将处理任何observable中的错误。