在嵌套对象的promise.then()中未定义响应

问题描述 投票:1回答:1

我在redux调度中遇到奇怪的行为。对于分派功能res未定义,但是对于控制台日志,该功能调用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
    }
});
reactjs typescript react-redux axios redux-thunk
1个回答
0
投票

如果对象引用丢失,则只需传递值。另外,检查传递给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))
          })
        })
    }
);
© www.soinside.com 2019 - 2024. All rights reserved.