Ответ не определен в promise.then () для вложенного объекта - PullRequest
1 голос
/ 24 февраля 2020

Я испытываю странное поведение при отправке редукса. Для диспетчерской функции res не определено, однако для консольного журнала на одну строку выше этот вызов функции правильно регистрируется. Есть идеи, почему это происходит?

основное действие

export const uploadFiles = (files: File[], artworkId: string, fileType: string) => (
    (dispatch: Dispatch) => {
        files.forEach(file => {
            axios.post(
                `${my-api-route}, convertToFormDataFile(file, fileType))
                .then(res => {
                    console.log(res.data.data.id) //works
                    dispatch(uploadFileLimitedEditionSuccess(res.data.data.id, file, fileType))
                }) //does not work
                .catch(err => dispatch(uploadFileLimitedEditionFailure(err.response.data.errors[fileType === 'pdf' ? 'pdf' : 'file'], file.name, fileType)))
        })
    }
);

успешное действие

const uploadFileLimitedEditionSuccess = (id: any, file: File, fileType: string):LimitedEditionActionType => ({
    type: LIMITED_EDITIONS_UPLOAD_FILE_SUCCESS,
    payload: {
        id,
        file,
        fileType
    }
});

1 Ответ

0 голосов
/ 24 февраля 2020

Если ссылка на объект потеряна, просто введите значение. Также проверьте значение, которое вы передаете dispatch - это должен быть объект (см. https://redux.js.org/api/store/#dispatchaction)

export const uploadFiles = (files: File[], artworkId: string, fileType: string) => (
    (dispatch: Dispatch) => {
        files.forEach(file => {
            axios.post(
                `${my-api-route}, convertToFormDataFile(file, fileType))
                .then(res => {
                    console.log('I got called!)
                    console.log(res)
                    console.log(res.data.data.id) //works
                    const id = res.data.data.id
                  const toDispatch = uploadFileLimitedEditionSuccess(id, file, fileType)
                  console.log(toDispatch)
                  dispatch(toDispatch)
                }) //does not work
                .catch(err => {
               console.log(err)
dispatch(uploadFileLimitedEditionFailure(err.response.data.errors[fileType === 'pdf' ? 'pdf' : 'file'], file.name, fileType))
          })
        })
    }
);
...