Reactjs 嵌套对象的promise.then()中未定义响应
我在redux调度中遇到了奇怪的行为。对于调度函数res未定义,但是对于控制台日志,正确记录该函数调用res上方的一行。你知道为什么会这样吗 主要动作Reactjs 嵌套对象的promise.then()中未定义响应,reactjs,typescript,react-redux,axios,redux-thunk,Reactjs,Typescript,React Redux,Axios,Redux Thunk,我在redux调度中遇到了奇怪的行为。对于调度函数res未定义,但是对于控制台日志,正确记录该函数调用res上方的一行。你知道为什么会这样吗 主要动作 export const uploadFiles = (files: File[], artworkId: string, fileType: string) => ( (dispatch: Dispatch) => { files.forEach(file => { axios.
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
}
});
成功行动
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
}
});
如果对象引用丢失,只需传入值。另外,检查要传递给
分派的值
——它必须是一个对象(请参阅)
如果对象引用丢失,只需传入值。另外,检查要传递给
分派的值
——它必须是一个对象(请参阅)
您确定
res.data.data.id
正确吗?你能显示res的内容吗?你已经标记了这个,但看起来更像是的,对不起,我刚刚更正了console.log中的消息。这个打印正确。我知道这是Typescript,但错误并不是来自打字,因此我认为js标记会更好。只需console.log(res)并确保您正确访问道具,甚至更好,销毁它们。是的,响应具有所有属性。情况是dispatch不知何故丢失了res对象。此外,在调试器中,我发现它应该具有对该对象的访问权限。您确定res.data.data.id
正确吗?你能显示res的内容吗?你已经标记了这个,但看起来更像是的,对不起,我刚刚更正了console.log中的消息。这个打印正确。我知道这是Typescript,但错误并不是来自打字,因此我认为js标记会更好。只需console.log(res)并确保您正确访问道具,甚至更好,销毁它们。是的,响应具有所有属性。情况是dispatch不知何故丢失了res对象。更重要的是,在调试器中我发现它应该有访问该对象的权限。我以前尝试过这个,但它不起作用。另外,我在console.log中放入了变量(响应值),它的日志工作了,但分派没有问题。问题可能出在uploadFileLimitedEditionSuccess
中,然后……据我所知,uploadFileLimitedEditionSuccess
在其参数未完全求值之前不会被调用。分派将对象作为其参数:。uploadFileLimitedEditionSuccess的返回值是多少?谢谢你的提示。实际上,在将console.log放入catch块后,我发现有一个非对象传递给函数,该函数需要对象。经过进一步研究,我发现这是我的减速机中的Object.entries。我以前试过这个,但不起作用。另外,我在console.log中放入了变量(响应值),它的日志工作了,但分派没有问题。问题可能出在uploadFileLimitedEditionSuccess
中,然后……据我所知,uploadFileLimitedEditionSuccess
在其参数未完全求值之前不会被调用。分派将对象作为其参数:。uploadFileLimitedEditionSuccess的返回值是多少?谢谢你的提示。实际上,在将console.log放入catch块后,我发现有一个非对象传递给函数,该函数需要对象。经过进一步研究,我发现这是我的减速机中的Object.entries。