重装传奇在获得连续请求的同时取消了之前的请求。

问题描述 投票:1回答:2

在saga中,我创建了一个连续调用的生成器,当第二次调用时,第一次调用在飞行中,那么第一个动作就会被取消,我只从第二个请求中获取数据,以下是我的代码在减速器中的初始状态

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

featuredData和popularData会根据saga中api调用的结果进行更新。

这是我的传奇代码

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('feature')fetchSectionData('popular'),得到的结果是

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

而不是

sectionData{
featuredData: [
{
    name: 'featured'
}],
popularData: [
{
    name: 'popular'
}]}
reactjs redux-saga
2个回答
0
投票

这正是takeLatest的工作方式。如果一个请求已经开始,然后另一个请求被发出,第一个请求被取消。我想你应该用takeEvery代替。请看 https:/redux-saga.js.orgdocsapi。 来实现takeEvery的功能。


0
投票

你正在使用 采取最新的

在你的情况下。务必 拿下每个

另外 阅读

© www.soinside.com 2019 - 2024. All rights reserved.