Необработанное отклонение (TypeError): отправка не является функцией, получающей эту ошибку в action creator

#javascript #reactjs #redux-thunk #dispatch #dispatch-async

#javascript #reactjs #redux-thunk #отправка #отправка-асинхронная

Вопрос:

Я получаю эту ошибку при вызове отправки.

 Unhandled Rejection (TypeError): dispatch is not a function
  

вот мой код action creator, в котором я получаю указанную выше ошибку.

 export function getStatus(requestId) {
  return async dispatch => {
    let url = GET_UPLOADED_STATUS_URL   requestId;
    let response = await get(url);
    const timeout = setTimeout(getStatus(requestId), 2000);
    if (response.status === 200) {
      let total = response.payload.count;
      let totalCompleted = response.payload.uploadCompleted
      dispatch({
        type: UPDATE_PROGRESS_BAR_STATUS,
        total: total,
        completed: totalCompleted
      })
      if (!response.payload == "") {
        toastr.info(`Total processed ${totalCompleted}`);
      }
      if (response.payload === "") {
        dispatch({
          type: SHOW_PROGRESS_BAR,
          data: false
        })
        clearTimeout(timeout);
      }
    } else {
      clearTimeout(timeout);
      dispatch({
        type: SHOW_PROGRESS_BAR,
        data: false
      });
    }
  }
}

  

Как вы можете видеть, я вызываю это действие каждые две секунды.Она отлично работает при первом выполнении, но при выполнении во второй раз проходит через указанную выше ошибку при отправке UPDATE_PROGRESS_BAR_STATUS.
и в консоли, получающей эту ошибку.

 Uncaught (in promise) TypeError: dispatch is not a function
    at _callee3$ (index.js:100)
  

может кто-нибудь, пожалуйста, подскажите мне, что я здесь делаю не так или почему я получаю эту ошибку. любая помощь будет оценена заранее, спасибо.

вот мой обновленный код, в котором я вызываю действие GetStatus().

 export function uploadFileFolder(arrayofFile, jdId) {
  return async dispatch => {
    dispatch({
      type: REQUEST_INITIATED
    });
    let url = UPLOAD_FILE_FOLDER_URL   jdId;
    let response = await post(url, arrayofFile);
    if (response.status === 200) {
      dispatch({
        type: REQUEST_SUCCESSED
      });
      history.push({
        pathname: "/file-list/"   jdId
      });
      toastr.success(response.payload.message);
      dispatch({
        type: SHOW_PROGRESS_BAR,
        data: true
      });
      let requestId = response.payload.requestId;
      dispatch(getStatus(requestId));
    } else {
      dispatch({
        type: REQUEST_SUCCESSED
      });
    }
  }
}

  

и действие uploadFileFolder () Я вызываю это, нажав на кнопку в моем компоненте.

Комментарии:

1. не могли бы вы предоставить подробную информацию, как вы вызываете функцию GetStatus?

2. @Tuhin пожалуйста, посмотрите в моем обновленном вопросе.

Ответ №1:

Вы получаете эту ошибку, потому что при вызове GetStatus() действие каждые 2 секунды не получает отправки. Как вы сказали, она отлично работает при первом выполнении, но при вызове во 2-й раз происходит ошибка, потому что во второй раз она не получает отправку. Поэтому вам необходимо обновить свой код, как указано ниже.

 const timeout = setTimeout(dispatch(getStatus(requestId), 2000));

  

Ответ №2:

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

     //YOUR COMPONENT FILE
    import {uploadFileFolder} from 'path/to/your/uploadFileFolderFile' 

    export class YourComponent .... {
      //Your Component Code

      onButtonClick() {
        //OtherCode
        this.props.uploadFileFolder(arrayofFile, jdId)
      }

    }
    const mapStateToProps = (state) => {
      return {
      };
    };

    export default connect(mapStateToProps, { uploadFileFolder })(YourComponent);


    //Action File
    export const uploadFileFolder => (arrayofFile, jdId) => {
      return async dispatch => {
        //...Rest of the code
      };
    }