Javascript 有条件地重演传奇
我有一个关于redux传奇的问题,那就是是否有任何方法可以实现这个目标,但要有条件 例如,我有一个歌曲类型的动态列表(说唱、流行、嘻哈…),我想按歌曲类型获取歌曲。我使用类型“FETCH_SONGS_BY_type”定义一个redux操作,然后将songType传递给它。这个动作看起来像Javascript 有条件地重演传奇,javascript,reactjs,react-redux,redux-saga,Javascript,Reactjs,React Redux,Redux Saga,我有一个关于redux传奇的问题,那就是是否有任何方法可以实现这个目标,但要有条件 例如,我有一个歌曲类型的动态列表(说唱、流行、嘻哈…),我想按歌曲类型获取歌曲。我使用类型“FETCH_SONGS_BY_type”定义一个redux操作,然后将songType传递给它。这个动作看起来像 // actions const fetchSongsByType = songType => ({ type: FETCH_SONGS_BY_TYPE, songType }); -------
// actions
const fetchSongsByType = songType => ({
type: FETCH_SONGS_BY_TYPE,
songType
});
--------------------------------------------------
//saga
function* fetchSongsByTypeSaga(action) {
// request songs list by action.songType
}
function* Saga() {
yield takeLatest(FETCH_SONGS_BY_TYPE, fetchSongsByTypeSaga);
}
因此,我希望,只有在下一个传奇运行具有相同的歌曲类型时,才能取消上一个传奇任务
在上面的代码中,我得到:
但我预计会是这样的:
我感谢您的帮助,提前感谢。如果您查看的文档,您将看到如何使用低级效果构建此效果。通过本例,您可以轻松创建自定义效果,该效果仅取消来自同一音乐类型的动作 takeLatestByType:
const takeLatestByType=(pattern或channel,saga,…args)=>fork(函数*(){
//保留对type属性标识的每个分叉传奇的引用
让lastTasks={};
while(true){
const action=屈服带(pattern或channel);
//如果有相同类型的分叉传奇,请取消它。
if(lastTasks[action.type]){
产生取消(lastTasks[action.type]);
}
lastTasks[action.type]=收益分叉(saga,…args.concat(action));
}
});
用法:
函数*Saga(){
按类型获取最新收益(按类型获取歌曲,按类型获取歌曲);
}
您如何期望redux
知道将发生4
?如果2
和4
之间的持续时间很长,redux
如何知道等待多长时间?最好在React
layerHi@codemax中处理这样的逻辑,谢谢你的回复,我没有提到持续时间,因为takeLatest的逻辑是,如果2在调用4时仍然运行,那么2将被取消。但我希望只有在下一个传奇系列具有相同歌曲类型的跑步任务时,它才会取消。嗨,克里斯蒂安,谢谢你的回复。我会将此标记为已接受