#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
};
}