【发布时间】:2021-02-05 19:56:59
【问题描述】:
在一个反应组件中,我有以下代码:
const handleButton = async () => {
const resp = await updateProject(projectInfo);
setIsProjectModalVisible(false)
};
updateProject() 是对服务器的 POST 请求,而 setIsProjectModalVisible 是作为 prop 传递的父组件的 setState 函数。
我有一个奇怪的行为:使用前面的代码,Modal 不会被隐藏(setIsProjetModalVisible(false) 不会运行),但是如果我交换两行:
const handleButton = async () => {
setIsProjectModalVisible(false)
const resp = await updateProject(projectInfo);
};
它会按预期工作并且模态将变得不可见。
经过一番研究,我发现了问题:服务器没有响应 updateProject()。修复该问题后,第二行代码现在将产生预期的行为。
即使问题解决了,我还是想了解一下这种行为:由于服务器没有响应,我可能希望在 await 行中无限等待,但是在调试时,它只会跳过该行并且不会显示错误。这是为什么?谢谢!
【问题讨论】:
-
我认为从你的代码 sn-p 最好有一个 try catch,所以在这种情况下,如果帖子抛出一个错误,你可以在 catch 时记录,我认为错误正在发生,但来自代码 sn -p 没有什么可以捕捉到它
-
关闭你的服务器,尝试运行
updateProject(projectInfo).then(undefined, (reason) => console.log(reason));而不是你的等待并发布结果,拜托。 -
您需要检查承诺是成功履行还是未决。因此,严格来说,这可能不是一个错误,而只是您的承诺仍未兑现/未决,从而使您的代码冻结。我认为 catch 可以很好地捕捉实际错误,但对这个特定的异步问题没有帮助
标签: javascript reactjs server async-await httpresponse