Redux 传奇在获得连续请求时取消了先前的

Redux saga cancels previous while getting consecutive request

在 saga 中,我创建了一个连续调用的生成器。当进行第二个呼叫并且第一个呼叫正在进行时,第一个操作被取消,我只从第二个请求中获取数据 这是我的代码 reducer 中的初始状态

export const initialState = {
sectionData:
{
    featuredData: false,
    popularData: false,
}}

featuredData 和 popularData 根据 api 调用 saga

的结果进行更新

这是我的 saga 代码

function* getSectionData(){ yield takeLatest(LOAD_SECTION_DATA, fetchSectionData) }

function* fetchSectionData(action){
try
{
    var requestURL = `http://localhost:3001/v1/fetchData?page=` + action.section_name;
    console.log('Request Url', requestURL)
    const response = yield call(getRequest, requestURL);
    var result = {}
    if (action.section_name)
    {
        let sectionName = [action.section_name] + 'Data'
        result[sectionName] = response.data
    }
    console.log('Request result', result)
    yield put(sectionDataLoaded(result));
}
catch (err)
{
    yield put(sectionDataLoadingError(err));
}}

export default function* HomePageSaga(){ yield all([getSectionData()]); }

我打电话 fetchSectionData('featured') fetchSectionData('popular') 连续 我得到的结果是

sectionData{
featuredData: false,
popularData: [{
    name: 'popular'
}]}

而不是

sectionData{
featuredData: [
{
    name: 'featured'
}],
popularData: [
{
    name: 'popular'
}]}

这正是 takeLatest 的工作方式。如果一个请求已启动,然后又发出另一个请求,则第一个请求将被取消。我想你想改用 takeEvery 。有关 takeEvery 的功能,请参阅 https://redux-saga.js.org/docs/api/

您正在使用 takeLatest

对于您的情况,确保使用 takeEvery

还有read