Я хочу отправить 4 разных значения из сервиса Get с другим действием. хочу сделать один звонок - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь показать 4 разных данных массива. Я звоню получить услугу, но звоню 4 раза. вместо этого я хочу сделать один звонок. с той же ссылкой, но хочу отправить 4 разных действия для разных данных. Как вы можете видеть, есть 4 const, которые я хочу отправить, и мне нужно сделать 4 звонка прямо сейчас. я использую initialload (), чтобы добраться до моего представления в Redux.

export function getcoCodeFilter() {
  return new Promise((resolve, reject) => {
    fetch(getServiceContext() + 'getfilteroptions', {
      method: 'GET',
      credentials: 'same-origin'
    })
      .then((response) => {
        if (response.ok) {
          response
            .json()
            .then((json) => {
              const filterDisplay = json.data;
              const companyList = filterDisplay.companyCodes;
              const formtypeList = filterDisplay.formTypes;
              const yearList = filterDisplay.yearList;
              const qtrList = filterDisplay.quarterList;
              resolve(companyList);
            });
        }
        else {
          response
            .json()
            .then((json) => {
              const errors = json;
              reject(errors ? errors.exceptionMessages : []);
            });
        }
      });
  });
}

// get filter formtypes
export function getFormTypesFilter() {
  return new Promise((resolve, reject) => {
    fetch(getServiceContext() + 'getfilteroptions', {
      method: 'GET',
      credentials: 'same-origin'
    })
      .then((response) => {
        if (response.ok) {
          response
            .json()
            .then((json) => {
              const coTypesList = json.data;
              resolve(coTypesList.formTypes);
            });
        }
        else {
          response
            .json()
            .then((json) => {
              const errors = json;
              reject(errors ? errors.exceptionMessages : []);
            });
        }
      });
  });
}

// get year for Filters
export function getYearFilter() {
  return new Promise((resolve, reject) => {
    fetch(getServiceContext() + 'getfilteroptions', {
      method: 'GET',
      credentials: 'same-origin'
    })
      .then((response) => {
        if (response.ok) {
          response
            .json()
            .then((json) => {
              const coTypesList = json.data;
              resolve(coTypesList.yearList);
            });
        }
        else {
          response
            .json()
            .then((json) => {
              const errors = json;
              reject(errors ? errors.exceptionMessages : []);
            });
        }
      });
  });
}

// get quarters
export function getQTRFilter() {
  return new Promise((resolve, reject) => {
    fetch(getServiceContext() + 'getfilteroptions', {
      method: 'GET',
      credentials: 'same-origin'
    })
      .then((response) => {
        if (response.ok) {
          response
            .json()
            .then((json) => {
              const coTypesList = json.data;
              resolve(coTypesList.quarterList);
            });
        }
        else {
          response
            .json()
            .then((json) => {
              const errors = json;
              reject(errors ? errors.exceptionMessages : []);
            });
        }
      });
  });
}


export const getInitialLoad = (dispatch) => {
  return new Promise((resolve) => {


    getcoCodeFilter().then((companyList) => {
      dispatch({
        type: 'COCODE_FILTER_DISPLAY',
        value: companyList
      });

      resolve();
    });

    getFormTypesFilter().then((formtypeList) => {
      dispatch({
        type: 'FORMTYPES_FILTER_DISPLAY',
        value: formtypeList
      });

      resolve();
    });

    getYearFilter().then((yearList) => {
      dispatch({
        type: 'YEAR_FILTER_DISPLAY',
        value: yearList
      });

      resolve();
    });

    getQTRFilter().then((qtrList) => {
      dispatch({
        type: 'QTR_FILTER_DISPLAY',
        value: qtrList
      });

      resolve();
    });
  });
};

1 Ответ

0 голосов
/ 08 апреля 2019

То, что я часто делаю, это хранит всю информацию в объекте и отправляет действие с объектом.Действие будет подхвачено еще одним редуктором.

что-то похожее на это.

export const getInitialLoad = (dispatch) => {
    const ResponseData = {}
    return new Promise((resolve) => {
      getcoCodeFilter().then((companyList) => {
        ResponseData["companyList"] = companyList;
        resolve();
      });

      getFormTypesFilter().then((formtypeList) => {
        ResponseData["formtypeList"] = formtypeList;
        resolve();
      });

      getYearFilter().then((yearList) => {
        ResponseData["yearList"] = yearList;
        resolve();
      });

      getQTRFilter().then((qtrList) => {
        ResponseData["qtrList"] = qtrList;
        dispatch({
          type: 'INITIAL_LOAD_ACTION',
          value: ResponseData
        });
        resolve();
      });
    });
  };

INITIAL_LOAD_ACTION можно назвать любым и использовать в любом количестве редукторов.все, что вам нужно сделать, это установить состояние, используя что-то вроде

action.payload.value.ResponseData, где ResponseData - это одна из 4 клавиш, которые вы установили выше.

РЕДАКТИРОВАТЬ:

export const getInitialLoad = async (dispatch) => {
    const ResponseData = {}
    ResponseData["companyList"] = await  getcoCodeFilter();
    ResponseData["formtypeList"] = await  getFormTypesFilter();
    ResponseData["yearList"] = await  getYearFilter();
    ResponseData["qtrList"] = await  getQTRFilter(); 
    dispatch({
        type: 'INITIAL_LOAD_ACTION',
        value: ResponseData
    });
  };

ИЛИ вы можете сделать что-то вроде

export const getInitialLoad = async (dispatch) => {
    const ResponseData = await Promise.all([getcoCodeFilter, getFormTypesFilter, getYearFilter, getQTRFilter])
    dispatch({
        type: 'INITIAL_LOAD_ACTION',
        value: ResponseData
    });
  };

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

...