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

Reactjs 如何等待另一个史诗谁听相同的动作流,reactjs,redux,rxjs,redux-observable,Reactjs,Redux,Rxjs,Redux Observable,因此,在我努力掌握RXjs的过程中,我遇到了以下情况:;当应用程序重新水化(第一次引导)时,我会发送一个相应的重新水化操作。我有两部史诗在听这个动作,但我希望第二部史诗只能在第一部史诗结束时调用。我目前的尝试如下所示: export const rehydrateEpic = ( action$: ActionsObservable ) => action$.ofType(REHYDRATE) .switchMap(() => { // Wait for

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

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())
        })
    })
我在我的开发工具中看到,我得到了一个
get\u ACCOUNT\u INFO\u失败
,因此不知何故,Redux流似乎起了作用

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

听起来第二部史诗不应该听
再水化
,而应该听第一部史诗完成时发出的动作。听起来怎么样

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


听起来第二部史诗不应该听
再水化
,而应该听第一部史诗完成时发出的动作。听起来怎么样?

所以我自己想出来了。通过使用
zip()
,我可以等待两个流都发出。在我的例子中,它看起来是这样的

export const rehydrateEpic = (
  action$: ActionsObservable
) =>
  action$.ofType(REHYDRATE)
    // Wait for the JWT token to be successfully fetched.
    .zip(() => action$.ofType(GET_JWT_SUCCESS))
    .switchMap(() => {
      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())
    })

所以我自己想出来了。通过使用
zip()
,我可以等待两个流都发出。在我的例子中,它看起来是这样的

export const rehydrateEpic = (
  action$: ActionsObservable
) =>
  action$.ofType(REHYDRATE)
    // Wait for the JWT token to be successfully fetched.
    .zip(() => action$.ofType(GET_JWT_SUCCESS))
    .switchMap(() => {
      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())
    })

这可能确实是一个解决方案,但我想对这两个操作做出回应,因为
GET\u JWT\u SUCCESS
可以在应用程序的其他状态下进行调度。也许可以说我能够分派
操作。getAccountInfo()
,那么
GET\u ACCOUNT\u INFO\u SUCCESS
也会显示在Redux记录器中。但是从未调用
do()
。这确实是一个解决方案,但我想对这两个操作作出响应,因为
GET\u JWT\u SUCCESS
可以在应用程序的其他状态下调度。也许可以说我能够分派
操作。getAccountInfo()
,那么
GET\u ACCOUNT\u INFO\u SUCCESS
也会显示在Redux记录器中。但是从未调用
do()