Javascript 如何直接从异步函数返回对象? 我有Redux存储函数,在这里我必须生成一个AJAX并相应地更新状态。但是,我创建了以下函数,它在返回状态之前不更新x值。因此,我创建了async函数 在下面的示例中,我试图在函数lookup之外获取响应,因此我创建了一个名为newData的同步,以使其直接重新运行res,而不在其内部添加var 请注意:我不能在store函数中使用React.UseState(),因为它不是组件函数
你不可能用你想要的方式来做这件事。您需要做的是这样的事情:Javascript 如何直接从异步函数返回对象? 我有Redux存储函数,在这里我必须生成一个AJAX并相应地更新状态。但是,我创建了以下函数,它在返回状态之前不更新x值。因此,我创建了async函数 在下面的示例中,我试图在函数lookup之外获取响应,因此我创建了一个名为newData的同步,以使其直接重新运行res,而不在其内部添加var 请注意:我不能在store函数中使用React.UseState(),因为它不是组件函数,javascript,reactjs,redux,Javascript,Reactjs,Redux,你不可能用你想要的方式来做这件事。您需要做的是这样的事情: const data = await newData(); dispatch({ type: "SetData", data }) Redux reducer不能是异步的。Redux reducer接受以前的状态和操作,并将其映射到新操作。就这样。不能从减速机调度操作或触发API调用 API调用需要在其他地方执行——在组件中、在操作创建者中,等等。一旦API调用完成,您就可以使用收到的数据发送一个“SetData”
const data = await newData();
dispatch({ type: "SetData", data })
Redux reducer不能是异步的。Redux reducer接受以前的状态和操作,并将其映射到新操作。就这样。不能从减速机调度操作或触发API调用
API调用需要在其他地方执行——在组件中、在操作创建者中,等等。一旦API调用完成,您就可以使用收到的数据发送一个“SetData”操作。然后,减速器根据此数据更新
状态。以下操作应有效:
const newData=async()=>{
返回等待查找(
“得到”,
“api/post/”,
(回复:myArrays[“posts”],状态:number)=>{
赋值(x,响应);
}
);
};
log(等待newData());
通过这种方式,您可以避免在newData
内按要求分配另一个var
另外,还可以查看这篇关于如何使用redux进行异步数据获取的文章。听起来您需要进一步熟悉javascript(或一般)中的异步编程。为您分配开始trom的结果。提示我做出此响应的是您在console.log函数中的使用。然后调用承诺(异步函数返回的内容)并不会神奇地将其转换为同步“值”,您可以使用承诺的“then”函数转换其数据或在数据准备就绪时执行操作,但then函数只返回一个新的承诺。我们都已经到了您现在的位置。'await'表达式只允许在异步函数内和模块的顶层使用。ts(1308)
尝试按照消息所述将async
添加到包装函数中。您不能像async console.log(await newData())代码>
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 })