redux observable如何保持通过有效负载

redux observable如何保持通过有效负载,redux,redux-observable,Redux,Redux Observable,如何继续将有效载荷传递给其他操作员 例如: login = (action$: ActionsObservable) => { return action$.ofType(SessionActions.LOGIN_USER) .mergeMap(({payload}) => { return this.http.post(`${BASE_URL}/auth/login`, payload) .map(result => (

如何继续将有效载荷传递给其他操作员

例如:

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

如何将有效载荷结果传递给map操作员?

有效载荷的值在
.map
中可用,因为该函数是用
有效载荷
定义的。您可以在该函数中使用当前写入方式的
有效负载

.map(result => ({
  type: SessionActions.LOGIN_USER_SUCCESS,
  payload: {
    one: result.json().meta,
    two: payload /* this is in parent scope from mergeMap */
  }
}))
但是,如果要使其更明确,一种方法是使用组合观察值:

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允许您组合多个观察对象,并提供一个选择器函数来形成结果对象。根据您的意图,当您希望在任何源发出时获得每个源的最新值时,可以满足您对类似问题的需要。

完全正确。但我要再次重申凯尔所说的话,你不需要给他们拉拉链,它已经在范围之内了!只需引用it.map(result=>({type:SessionActions.LOGIN_USER_SUCCESS,payload:{one:result.json().meta,two:payload/*这在mergeMap*/}的父范围内))