Javascript redux promise如何知道在这种奇怪的情况下返回哪个结果?
我在udemy上学习这门课程:(付费墙,我知道,对不起) 设置如下,在action creator中,我有以下代码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,
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);