我想向两个不同的API发出请求。然后我需要组织这些数据。我正在使用redux-promise。
目前,我有一个函数,调用另外两个执行AJAX请求的函数:
export function fetchEstimates(input) {
let firstRequest = fetchFirstRequest(input);
let secondRequest = fetchFirstRequest(input);
return {
type: FETCH_DATA,
payload: {
firstRequest: firstRequest
secondRequest: secondRequest
}
}
}
不幸的是,通过将两个请求放在一个对象中,我似乎无法访问结果。
export default function(state = [], action) {
switch (action.type) {
case FETCH_DATA:
// console.log(action.firstRequest);
// console.log(action.secondRequest);
return result;
}
return state;
}
当我在开发工具中切换对象时,我来到这里:
[[PromiseStatus]]:"resolved"
[[PromiseValue]]:Object
我可以继续切换选项,但我似乎无法在我的代码中访问它们。
如果在我的有效载荷中,我只是返回
payload: firstRequest
我没有问题。但当然,我需要两个请求。有任何想法吗。处理这个问题的好方法是什么?
答案 0 :(得分:1)
如果您查看source for redux-promise,就会发现它假设您已经提供了作为"有效负载"的承诺。你的行动中的字段。相反,你提供了一个带有两个promises的对象作为" payload"下的子字段。我假设你真的对两个承诺的解决感兴趣,然后将两个结果传递给reducer。您希望使用Promise.all
创建一个新的承诺,将两个原始承诺的结果作为参数接收,然后将该承诺用作您的负载。然后,reducer将收到类似:{type : "DATA_RECEIVED", payload : [response1, response2]}
。
答案 1 :(得分:0)
您需要某种中间件来处理Promise
s(如redux-thunk),并将Promise.all
中的承诺包装起来等到它们都被解析。如果您需要代码示例,请告诉我。