我有一个用于在应用程序中搜索的 redux 操作。当用户开始搜索时,它会批处理查询并为每个请求发送 30 个查询并将前 10 个请求排队。每当任何一个请求成功时,它都会将下一个请求添加到请求队列中。所有这一切都是作为一个 redux 操作发生的,只要请求成功,它就会调度操作以将结果附加到存储中。如果用户单击“取消搜索”并输入新的搜索词,我想输入有关如何处理此问题的信息。如何取消现有的请求和 redux 操作,以使之前的搜索请求不会成功并添加到结果存储中?
下面的示例代码:-
function search(queries){
// split the queries into chunks of size 30
batches = _.chunks(queries, 30);
let count = 0;
//get the first batch manually
getBatch(batches[0]);
function getBatch(batch){
axios.post('url', batch.join(',')).then((response) => {
// recursively call get batch to get rest of the data
if(count < batches.length) { getBatch(batches[count++]); }
// dispatch action to append the result into the store
dispatch({ type: 'APPEND_RESULT', payload: response })
}
}
}
这是共享概念的最小代码
我已阅读有关 axios 支持它的可取消承诺。但我不确定如何在第二次执行同一函数时控制此递归调用。
例如:用户输入将是 { ids :[1,2,3,..1000] } 我正在尝试创建批次并发送并行请求 { ids:[1,2, .. 29,30 }, { ids: [ 31, 32, .. 59,60]} 等。