我发现了这个有用的小函数,可以根据Redux Saga中保存的键来调节
export default function* throttlePerKey(pattern:string, selector: Function, timeout:number, saga:any) {
const set = new Set()
while(true) {
const action = yield take(pattern)
const id = selector(action)
const throttled = set.has(id)
if (throttled) {
} else {
set.add(id)
// Expire items after timeout
yield fork(function* () {
yield delay(timeout)
set.delete(id)
})
yield call(saga, action)
}
}
}我现在正试着让它去反弹。所以你总是得到最后一个。
有什么线索可以做到这点吗?
发布于 2020-09-17 12:18:53
当操作第一次发生时,您可以派生一个设置延迟的任务,然后调用saga,并保存任务对象。如果该操作在不久之后再次发生,您将取消该任务并启动另一个任务。一旦经过了足够长的时间而没有采取任何行动,最后一个任务将使其通过其延迟,并调用传奇。
export default function* debouncePerKey(pattern:string, selector: Function, timeout:number, saga:any) {
const map = new Map()
while(true) {
const action = yield take(pattern)
const id = selector(action)
const existingTask = map.get(id)
if (existingTask) {
yield cancel(existingTask)
}
const newTask = yield fork(function* () {
yield delay(timeout)
map.delete(id)
yield call(saga, action)
})
map.set(id, newTask)
}
}https://stackoverflow.com/questions/63931040
复制相似问题