Javascript redux promise如何知道在这种奇怪的情况下返回哪个结果?

Javascript redux promise如何知道在这种奇怪的情况下返回哪个结果?,javascript,reactjs,redux,Javascript,Reactjs,Redux,我在udemy上学习这门课程:(付费墙,我知道,对不起) 设置如下,在action creator中,我有以下代码 export function createPost(values, callback){ const request = axios.post(`${ROOT_URL}/posts${API_KEY}`, values) .then(()=>callback()); return { type: CREATE_POST,

我在udemy上学习这门课程:(付费墙,我知道,对不起)

设置如下,在action creator中,我有以下代码

export function createPost(values, callback){
    const request = axios.post(`${ROOT_URL}/posts${API_KEY}`, values)
        .then(()=>callback());

    return {
        type: CREATE_POST,
        payload: request,
    }
}
我正在使用redux promise中间件来解决这个问题,所以在reducer中我可以有这样的东西

export default function postReducer(state = {}, action){
    switch (action.type){
        case FETCH_POSTS:
            return _.mapKeys(action.payload.data, "id");


        default:
            return state
    }
}
(同样使用lodash,您会注意到下划线)

从有关承诺的文档中,我了解到chanied“返回”的值是最后一个承诺返回的最后一个值

但是这里的回调传递到这里
。然后(()=>callback())
返回
未定义的
。我的代码是如何工作的(所以我得到了我所做的HTTP调用的主体)

我希望在减速器中,有效负载键的值为undefined

有人能解释一下这里的黑面包吗

(我不是JS方面的大师,我主要编写python代码。而且,我完全是一个反应迟钝的人)

[编辑] 更多澄清:

我的回拨:
const callback=()=>{this.props.history.push('/')}

回调可以工作,因为它确实将我重定向回索引页。我从一个组件传递回调。请注意,回调不会返回任何内容

我希望在调用减速机时,
action.payload
应该是
undefined
实际结果:
action.payload
实际上是一个对象


如果我没有另一个承诺的话,我希望代码能起作用。因此,在
const-request=axios.post(…)
的情况下,我很容易理解承诺中包含的值是请求的主体。但是,由于我使用的是链式承诺,因此我希望我的最终结果(由
redux promise
解析)是上一个承诺中回调返回的值。

您失去了结果,因为您没有从
然后
函数传递它。 下面是如何使用它的示例:

const request = axios.post(`${ROOT_URL}/posts${API_KEY}`, values)
    .then((resultFromPost)=>{callback(resultFromPost)});


。然后(()=>callback())
不会返回
未定义的
,而是返回
callback()
的结果(承诺)。它可能是也可能不是
未定义的
(当然
createPost
绝对不应该接受
回调
参数。它应该直接返回承诺)。@Bergi我是个新手。教程里的那个家伙说我应该这么做。这就是全部的背景。尽管我很欣赏最佳实践建议(我将进一步检查reducer),但我还是很想知道为什么我收到的结果(reducer收到一个包含数据的有效负载)与我预期的不匹配(reducer收到一个包含未定义的有效负载)。我不会失去结果,这是关键。我得到了一个“良好”的结果(HTTP响应的主体)。但是我不明白为什么。从该代码中,我希望返回未定义的
。我没有得到
未定义的
返回,但是我得到了一个JSON。我会尽量澄清这一点。
const request = axios.post(`${ROOT_URL}/posts${API_KEY}`, values)
   .then(callback);