如何等待另一个听同一动作流的史诗

时间:2018-01-25 15:39:37

标签: reactjs redux rxjs redux-observable

所以在我努力掌握RXjs时,我遇到了以下情况;当应用程序重新水化(第一次引导)时,我会发送相应的REHYDRATE动作。我有两个史诗听这个动作,但我希望第一个史诗只在第一个史诗结束时被调用。我目前的尝试如下:

export const rehydrateEpic = (
  action$: ActionsObservable
) =>
  action$.ofType(REHYDRATE)
    .switchMap(() => {
      // Wait for the JWT token to be successfully fetched.
      return action$.ofType(GET_JWT_SUCCESS)
        // When this line is removed, you will disappear in a spacetime continuum.
        .take(1)
        .do(action => {
          // I get the action here...
          console.log(action)
        })
        .switchMap(action => {
          return action$.ofType([
              actions.GET_ACCOUNT_INFO_SUCCESS,
              actions.GET_ACCOUNT_INFO_FAILURE,
            ])
            .do(action => {
              // ...but this one is never reached :(
              console.log(action)
            })
            .startWith(actions.getAccountInfo())
        })
    })

我在我的devtools中看到我得到了一个GET_ACCOUNT_INFO_FAILURE所以Redux流程似乎在起作用。

2 个答案:

答案 0 :(得分:2)

  

我有两个史诗听这个动作,但我希望第一个史诗只在第一个史诗结束时被调用。

听起来像第二部史诗不应该听REHYDRATE而是听取第一部史诗在完成时发出的动作。这听起来怎么样?

答案 1 :(得分:0)

所以我自己弄清楚了。通过使用import React from 'react'; import ReactDOM from 'react-dom'; import {createStore, applyMiddleware} from 'redux'; import thunk from 'redux-thunk'; import {Provider} from 'react-redux'; import reducer from './reducers'; import Index from './components/index.jsx'; const store = createStore(reducer, applyMiddleware(thunk)); ReactDOM.render( <Provider store={store}> <Index /> </Provider>, document.getElementById("root") ) ,我可以等待两个流发出。在我的例子中,它看起来像这样;

zip()