我的动作创建者中有以下代码:这是我在reducer中看到的内容 - " subData":[{},{},{}]} - 当我打印出来的时候是实际上是一个承诺 - 我尝试使用当时的转换,但没有运气..一直在努力...任何想法?
export function getMainData() {
return async function getMainData(dispatch) {
const { data } = await getMainDataAPI();
const subData = data.map((item) => {
const endpoint = 'build with item.name';
return Request.get(endpoint);
});
console.log('subddd' + subData); prints -> **[object Promise],[object Promise],[object Promise]**
dispatch({
type: GET_DATA_AND_SUBDATA,
payload: { data, subData }
});
};
}
async function getMainDataAPI() {
const endpoint = 'url';
return Request.get(endpoint);
}
答案 0 :(得分:0)
这次问题更加清晰。
您的console.log
会显示3个承诺对象的地图,因为在转到下一条指令之前,您没有等待API的结果。
基本上,您必须使用await Promise.all(data.map(async (item) => {
而不是data.map((item) => {
。
工作代码下方:
export function getMainData() {
return async function getMainData(dispatch) {
const { data } = await getMainDataAPI();
const subData = await Promise.all(data.map(async (item) => {
const endpoint = 'build with item.name';
return await Request.get(endpoint);
}));
dispatch({
type: GET_DATA_AND_SUBDATA,
payload: { data, subData: subData.data }
});
};
}
async function getMainDataAPI() {
const endpoint = 'url';
return Request.get(endpoint);
}
答案 1 :(得分:0)
看起来你正在派遣一系列未解决的Promises。我会尝试等待他们解决然后发送返回的结果:
...
Promise.all(subData).then(results => {
dispatch({
type: GET_DATA_AND_SUBDATA,
data: { data, subData: results }
}
});
祝你好运!