我正在发出一个POST请求,大约需要10秒才能完成。。。但在服务器返回200之前,我的警报会在单击时立即显示。为什么?我该如何修复它,直到服务器完成操作?
const handleClick = async () => {
const response = await fetch("/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(highlights),
}).then(alert("hi!"));
};
如果我把我的.改成.then(() => {alert("hi!");})
如下所示,当服务器请求时,页面会闪烁/似乎会刷新,但警报根本不显示
更新:
如果我使用这个代码:
const handleClick = async () => {
try {
const response = await fetch("/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(highlights),
});
alert("first");
} catch (error) {}
alert("second");
};
当按下按钮时,第二个警报立即启动,第一个警报从不启动。
引入Async/await是为了解决then/catch链接问题。你不需要使用then,你必须使用try/catch。async/await始终仅与try/catch一起使用。
const handleClick = async () => {
try{
const response = await fetch("/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(highlights),
})
alert("hi!")
}
catch(error){}
}
当您使用try/catch时,在i/o调用完成之前,控制不会继续。所以您也可以将alert或任何代码放在try-catch块之外。它将在等待调用完成后执行。像这个
try{
const response = await fetch("/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(highlights),
})
}
catch(error){}
}
alert("hi!")
试试这个。
如果您使用的是reactjs和nodejs,那么我已经模拟了您的需求,它正在按预期工作。我用过reactjs钩子。一旦后呼叫成功,警报将被触发。
你可以看看这个。https://github.com/ajaysikdar/reactjs-nodejs-alert
尝试:
.then(() => { alert("hi"); });
then
函数希望您向它传递一个函数,但实际上是调用一个函数(alert
(,并将该函数的返回值传递给then
。