[英]How to return a object directly from async function?
async
function。 var x =[]
lookup(
"GET",
"api/post/",
(response, status: number) => {
Object.assign(x, response);
}
);
console.log(x,'her x stay just ampty array []');
switch (action.type) {
case "SetData":
return { ...state, data: x };
default:
return state;
}
lookup
之外获取响应,因此我创建了一个名为newData
的同步,如何使其直接重新运行res
而无需在其中设置var
。const newData = async () => {
var x: any = [];
await lookup(
"GET",
"api/post/",
(response: myArrays["posts"], status: number) => {
Object.assign(x, response);
}
);
return x;
};
console.log(newData().then((res) => res));
switch (action.type) {
case "SetData":
return { ...state, data: newData().then((res) => {return res}) };
default:
return state;
}
以您尝试执行此操作的方式执行此操作是不可能的。 你需要做的是这样的:
const data = await newData();
dispatch({ type: "SetData", data })
Redux 减速机不能异步。 减速器采用以前的 state 和一个动作并将其映射到一个新动作。 而已。 您不能从 reducer 调度操作或触发 API 调用。
API 调用需要在其他地方完成 - 在您的组件中,在redux-thunk操作创建器中等。一旦 API 调用完成,然后您使用您收到的数据发送一个“SetData”操作。 然后,reducer 根据此数据更新state
。
以下应该有效:
const newData = async () => {
return await lookup(
"GET",
"api/post/",
(response: myArrays["posts"], status: number) => {
Object.assign(x, response);
}
);
};
console.log(await newData());
这样,您可以避免按照您的要求在newData
中分配另一个var
。
另请查看此redux 教程,了解如何使用 redux 进行异步数据获取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.