>我的动作创建器中有以下代码:这是我在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);
}
看起来您正在调度一系列未解决的承诺。 我会尝试等待他们解决,然后调度返回的结果:
...
Promise.all(subData).then(results => {
dispatch({
type: GET_DATA_AND_SUBDATA,
data: { data, subData: results }
}
});
祝你好运!
这次的问题更清楚了。
您的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);
}