如果前一个正在运行,如何防止运行任务出现传奇

时间:2020-06-06 08:06:54

标签: redux-saga saga

我是redux传奇的新手。我在代码中单击按钮以调用操作以获取列表,还有一个按钮可以加载更多内容,并且调用相同的操作。我想检查我的传奇故事是否已经运行,然后避免执行新任务并取消它。因为有时用户单击按钮2次或3次。这是我的传奇代码,操作为 SET_FETCH_LIST_TYPE

 import { takeLeading, all, call, put, take, select } from 'redux-saga/effects';
 import request from 'utils/request';
 import { push } from 'react-router-dom';
 import { uniqBy } from 'lodash';
 import { SET_FETCH_LIST_TYPE, SETTOOLSET, GET_TAXONOMIES } from './constants';
 import { URL } from '../App/constants';
 import {
   typeListError,
   typeListSuccess,
   setDraftTypeList,
   successTaxonomies,
 } from './actions';
 import { getDraftList } from './selectors';

 export function* getTypes(payload) {
   // const wpType = yield select(makeSelectTypes());
   const existingTypes = yield select(getDraftList());
   const types = yield call(getExistingTypes, payload.wpType, existingTypes);
   if (types && types.length && payload.pageNumber === 1 && !payload.filter) {
     console.log('iminside it baba')
     yield put(typeListSuccess(types));
   } else {
     const requestURL = `${URL}${payload.wpType}?per_page=12&page=${
       payload.pageNumber
     }&_embed${payload.filter ? `&${payload.filter}` : ''}`;
     try {
       // Call our request helper (see 'utils/request')
       const wpTypeList = yield call(request, requestURL);
       yield put(typeListSuccess(wpTypeList, payload.filter));
       const exTypes = [...existingTypes, ...wpTypeList];
       const removeDuplicate = uniqBy(exTypes, e => e.id);
       yield put(setDraftTypeList(removeDuplicate));
     } catch (err) {
       yield put(typeListError(err));
     }
   }
 }

 export function* getTaxonomies() {
   // const wpType = yield select(makeSelectTypes());
   const requestURL = `${URL}taxonomies`;
   try {
     const postTypes = yield call(request, requestURL);
     const keys = Object.keys(postTypes);
     const pages = yield all(
       keys.map(x =>
         call(
           request,
           `${URL}${postTypes[x].rest_base}${
             x === 'genuine_location' ? '?_embed' : ''
           }`,
         ),
       ),
     );
     yield put(successTaxonomies(pages));
   } catch (err) {
     yield put(typeListError(err));
   }
 }

 export function* getExistingTypes(typeName, types) {
   const typeList = types.filter(data => {
     return typeName === data.type;
   });
   return typeList;
 }

 export function* setToolset(payload) {
   yield put(push(`/newType/${payload.urlLocation}`));
 }
 // Individual exports for testing
 export default function* typesSaga() {
   yield takeLeading(GET_TAXONOMIES, getTaxonomies);
   yield takeLeading(SET_FETCH_LIST_TYPE, getTypes);
   yield take(SETTOOLSET, setToolset);
 }

0 个答案:

没有答案