Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带正则表达式的redux saga take_Javascript_Ecmascript 6_Redux_Redux Saga - Fatal编程技术网

Javascript 带正则表达式的redux saga take

Javascript 带正则表达式的redux saga take,javascript,ecmascript-6,redux,redux-saga,Javascript,Ecmascript 6,Redux,Redux Saga,我正在为我的web应用程序使用redux saga,但是我已经达到了一个点,我希望能够创建一个处理多种不同请求类型的saga。为了做到这一点,我希望能够将take或takeEvery与reg-ex一起使用。例如: 'foo/SOME_REQUEST' 'bar/SOME_REQUEST' 'baz/SOME_REQUEST' 所有这些都应该通过这样的方式来处理: yield takeEvery('*/SOME_REQUEST', handler); 有人知道这是否可能或如何实现吗?下面是一个

我正在为我的web应用程序使用
redux saga
,但是我已经达到了一个点,我希望能够创建一个处理多种不同请求类型的
saga
。为了做到这一点,我希望能够将
take
takeEvery
与reg-ex一起使用。例如:

'foo/SOME_REQUEST'
'bar/SOME_REQUEST'
'baz/SOME_REQUEST'
所有这些都应该通过这样的方式来处理:

yield takeEvery('*/SOME_REQUEST', handler);

有人知道这是否可能或如何实现吗?

下面是一个示例代码

演示:
GitHub:

您可以使用

yield takeLatest( action => /SOME_REQUEST$/.test(action.type), handler)

正如@lukehedger在此指出的:


检查文档:

您需要使用自定义效果

 //effect.js
    
 export const takeEveryRegex = (pattern, saga, ...args) =>
  fork(function* () {
    while (true) {
      const action = yield take("*")
      if (pattern.test(action.type)) {
        yield fork(saga, ...args.concat(action))
      }
    }
  })
然后在你的传奇中,按照正常模式使用它

//saga.js    

function* formFailureSaga({ payload, action }) {
  yield console.log("form failure SAGA", payload, action)
}
    
export function* watchFormFailureSaga() {
  yield takeEveryRegex(/^FAILURE[/s/S]*((?=.*FORM))/, formFailureSaga)
}
从源代码()看,匹配器似乎可以是一个函数,因此您应该能够
产生takeEvery(predicateFn,handler)
//saga.js    

function* formFailureSaga({ payload, action }) {
  yield console.log("form failure SAGA", payload, action)
}
    
export function* watchFormFailureSaga() {
  yield takeEveryRegex(/^FAILURE[/s/S]*((?=.*FORM))/, formFailureSaga)
}