redux-observable 如何保持传递有效载荷
redux-observable how to keep passing the payload
我怎样才能继续将有效负载传递给我的其他操作员?
例如:
login = (action$: ActionsObservable) => {
return action$.ofType(SessionActions.LOGIN_USER)
.mergeMap(({payload}) => {
return this.http.post(`${BASE_URL}/auth/login`, payload)
.map(result => ({
type: SessionActions.LOGIN_USER_SUCCESS,
payload: result.json().meta
}))
.catch(error => Observable.of({
type: SessionActions.LOGIN_USER_ERROR
}));
});
}
如何将有效载荷和结果传递给地图操作员?
payload
的值在 .map
中可用,因为函数是用 payload
in scope 定义的。您可以按照当前编写的方式在该函数中使用 payload
:
.map(result => ({
type: SessionActions.LOGIN_USER_SUCCESS,
payload: {
one: result.json().meta,
two: payload /* this is in parent scope from mergeMap */
}
}))
然而,如果你想让它更明确,一种方法是使用 zip
来组合 observables:
login = (action$: ActionsObservable) => {
return action$.ofType(SessionActions.LOGIN_USER)
.mergeMap(({payload}) => {
return Rx.Observable.zip(
Rx.Observable.of(payload),
this.http.post(`${BASE_URL}/auth/login`, payload),
(payload, result) => { payload, result }
)
.map({ payload, result} => ({
type: SessionActions.LOGIN_USER_SUCCESS,
payload: result.json().meta
}))
.catch(error => Observable.of({
type: SessionActions.LOGIN_USER_ERROR
}));
});
}
Zip 允许您组合多个可观察对象并提供选择器函数来形成结果对象。根据您的意图,combineLatest 可能适合您对类似问题的需求,当您希望任何源发出时每个源的最新值。
我怎样才能继续将有效负载传递给我的其他操作员?
例如:
login = (action$: ActionsObservable) => {
return action$.ofType(SessionActions.LOGIN_USER)
.mergeMap(({payload}) => {
return this.http.post(`${BASE_URL}/auth/login`, payload)
.map(result => ({
type: SessionActions.LOGIN_USER_SUCCESS,
payload: result.json().meta
}))
.catch(error => Observable.of({
type: SessionActions.LOGIN_USER_ERROR
}));
});
}
如何将有效载荷和结果传递给地图操作员?
payload
的值在 .map
中可用,因为函数是用 payload
in scope 定义的。您可以按照当前编写的方式在该函数中使用 payload
:
.map(result => ({
type: SessionActions.LOGIN_USER_SUCCESS,
payload: {
one: result.json().meta,
two: payload /* this is in parent scope from mergeMap */
}
}))
然而,如果你想让它更明确,一种方法是使用 zip
来组合 observables:
login = (action$: ActionsObservable) => {
return action$.ofType(SessionActions.LOGIN_USER)
.mergeMap(({payload}) => {
return Rx.Observable.zip(
Rx.Observable.of(payload),
this.http.post(`${BASE_URL}/auth/login`, payload),
(payload, result) => { payload, result }
)
.map({ payload, result} => ({
type: SessionActions.LOGIN_USER_SUCCESS,
payload: result.json().meta
}))
.catch(error => Observable.of({
type: SessionActions.LOGIN_USER_ERROR
}));
});
}
Zip 允许您组合多个可观察对象并提供选择器函数来形成结果对象。根据您的意图,combineLatest 可能适合您对类似问题的需求,当您希望任何源发出时每个源的最新值。