Redux TS 错误操作必须是普通对象。相反,实际类型是:'Promise'

Redux TS Error Actions must be plain objects. Instead, the actual type was: 'Promise'

我在使用 TS 和 Redux 时遇到此错误,无法弄清楚为什么会发生以及如何修复它。 我正在使用 redux thunk 中间件。 Redux TS 错误操作必须是普通对象。相反,实际类型是:'Promise'.

似乎问题开始出现在 updateUserSession(data)

以这种方式开始:

  insertUserSession(data)
                                .then(
                                    (res: IUserSession) => {
                                        updateUserSession(data)
                                    },
                                    err => {
                                        console.error("Insert session failed", err)
                                    },
                                )
                                .then(() => {
                                    //Here will continue another async action
                                })


    export const insertUserSession = (session: IUserSession): Promise<IUserSession> => {
    return axios.post("/user/" + session?.userId + "/session", session)
}
export const updateUserSession = (data: IUserSession) => {
    return axios.put('/user/' + data.userId + '/session', data)
        .then(
            (response) => {
                 fetchUserSession(store.getState().user?.userData?.username)
                    .then(
                        (res) => {
                            if (typeof res.data === "object" && !Object.keys(res.data).length)
                                 saveUserSession(res.data)
                         
                        },
                        (err) => {
                            console.error(err);
                        },
                    )
            },
            (err) => {
                console.error(err);
            },
        )
}

export const saveUserSession = (data: IUserSession) => {
    return (dispatch: Dispatch<UserAction>) => {
        dispatch({
            type: UserType.SAVE_USER_SESSION,
            payload: data,
        });
    }

}

这是因为 updateUserSession 实际上是一个 thunk 而不是一个动作。看来 saveUserSession 是您需要使用回调数据调用的操作。

务必声明正确的 thunk 签名:

const updateUserSession = (data: IUserSession) => (dispatch, getState) => {}

此外,不要忘记调用 dispatch 以触发 thunk 中的动作。