Javascript承诺捕获块在没有错误的情况下启动



我创建了一个函数,它可以调用下面显示的api。我正在前端显示来自setMessage的消息。由于某种原因,当没有错误时,.catch块消息在setMessage((中闪烁,然后setMessage(((最终以来自.then((的正确消息结束。

我不知道为什么会这样。

function handleCoupon(e) {
e.preventDefault();
setMessage("");
setLoading(true);
fetch(`${process.env.NEXT_PUBLIC_SERVER_API}/subscription/coupon/get`, {
method: "POST",
body: JSON.stringify({
appliedCoupon: couponCode.toLowerCase().trim(),
}),
headers: {
"Content-Type": "application/json",
},
})
.then((response) => response.json())
.then((data) => {
console.log(data);
if (data.coupon === true) {
setMessage(data.message);
setLoading(false);
} else {
setMessage(data.message);
setLoading(false);
}
})
.catch(
(error) => console.log(error.message),
setMessage("Something went wrong, please contact support")
);
}

.catch只接受单个函数作为参数,并且您正在传递其中的两个:

  1. (error) => console.log(error.message)
  2. setMessage("Something went wrong, please contact support")

尝试将它们合并为一个功能,例如

.catch((error) => {
console.log(error.message);
setMessage("Something went wrong, please contact support");
});

最新更新