Reactjs 添加takeUntil将停止触发所有动作rxJS,redux可观察

Reactjs 添加takeUntil将停止触发所有动作rxJS,redux可观察,reactjs,redux,rxjs,rxjs6,redux-observable,Reactjs,Redux,Rxjs,Rxjs6,Redux Observable,我正在试图找到一种方法,一旦用户注销,就可以取消所有HTTP请求。 我创建了一个通用函数,负责创建ajax请求。这就是函数 const createRequest = (ajaxParameters) => { return ajax(ajaxParameters).pipe( takeUntil([ofType("LOGOUT")]) ) }; 我所有的epic函数都导入了上面的函数来发出HTTP请求。我在做这样的事情 const sendRequest = (u

我正在试图找到一种方法,一旦用户注销,就可以取消所有HTTP请求。 我创建了一个通用函数,负责创建ajax请求。这就是函数

const createRequest = (ajaxParameters) => {
  return ajax(ajaxParameters).pipe(
    takeUntil([ofType("LOGOUT")])
  )
};
我所有的epic函数都导入了上面的函数来发出HTTP请求。我在做这样的事情

   const sendRequest = (url) => {
       xhr = createRequest(_.merge({}, requestDefaults, {
             method: "GET",
             url: url
          }, token))
      xhr.pipe(
          map( 
             // some code over here and triggering some actions over here
          )
      )
   }
问题是每当我像上面那样添加
takeUntil
时,它就会停止触发所有史诗。知道我做错了什么吗

史诗代码

const fetchUserData = action$ => action$.pipe(
  ofType(user.FETCH_USER_DATA.PENDING),
  mergeMap(sendRequest(URL_OVER_HERE))
);


我不知道
[ofType(“LOGOUT”)]
在那里做什么,但很可能,您想要的是
管道
关闭
操作$

const createRequest = (ajaxParameters) => {
  return ajax(ajaxParameters).pipe(
    takeUntil(action$.pipe(ofType("LOGOUT")))
  )
};
takeUntil
如果收到值,则完成观察。按照您的方式,它可能认为数组是可观察的,而值是类型
的运算符。所以它在任何事情开始之前就完成了。这就是为什么你必须听
动作$

作为另一种优化,您可以立即
pipe
关闭
xhr
可观察:

const sendRequest = (url) => {
  createRequest(_.merge({}, requestDefaults, {
    method: "GET",
    url: url
  }, token))
  .pipe(
    map( 
      // some code over here and triggering some actions over here
    )
  )
}

我不知道
[ofType(“LOGOUT”)]
在那里做什么,但最有可能的是,您想要的是
管道
关闭
操作$

const createRequest = (ajaxParameters) => {
  return ajax(ajaxParameters).pipe(
    takeUntil(action$.pipe(ofType("LOGOUT")))
  )
};
takeUntil
如果收到值,则完成观察。按照您的方式,它可能认为数组是可观察的,而值是类型
的运算符。所以它在任何事情开始之前就完成了。这就是为什么你必须听
动作$

作为另一种优化,您可以立即
pipe
关闭
xhr
可观察:

const sendRequest = (url) => {
  createRequest(_.merge({}, requestDefaults, {
    method: "GET",
    url: url
  }, token))
  .pipe(
    map( 
      // some code over here and triggering some actions over here
    )
  )
}

您通常不需要使用
takeUntil
完成请求,因为当您注销时,您应该销毁所有组件,并且这些组件应该取消订阅。你能展示一个不再有效的epic吗?@martin我添加了epic代码你通常不需要使用
takeUntil
完成请求,因为当你注销时,你应该销毁所有组件,这些组件应该取消订阅。你能展示一部不再有效的史诗吗?@martin我已经添加了史诗代码sawtaytes这个解决方案的问题是
takeUntil(action$.pipe(ofType(“LOGOUT”))
我这里没有action$变量。因此我不能按你说的那样做。其次,我创建了通用的get、post等请求。所有的epics从一个文件中导入请求对象,然后做他们需要做的工作。我可以做的是这样的
takeUntil(从(ofType(“LOGOUT”))
,但这也无助于做不到的事情<类型的code>是一个运算符。您需要传入
操作$
。如果你想要一些真正通用的东西,使用一个动作
AJAX\u获取
,然后在那里进行AJAX调用。很抱歉,您的回复太晚,但您是否可以给出一个示例sawtaytes此解决方案的问题是
takeUntil(action$.pipe(ofType(“LOGOUT”)
我这里没有action$变量。因此我不能按你说的那样做。其次,我创建了通用的get、post等请求。所有的epics从一个文件中导入请求对象,然后做他们需要做的工作。我可以做的是这样的
takeUntil(从(ofType(“LOGOUT”))
,但这也无助于做不到的事情<类型的code>是一个运算符。您需要传入
操作$
。如果你想要一些真正通用的东西,使用一个动作
AJAX\u获取
,然后在那里进行AJAX调用。嘿,很抱歉回复太晚,但是您可以举个例子吗