Javascript 承诺在没有错误时启动 catch 块

Javascript promises catch block initiating when no error

我创建了一个调用如下所示的 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")

尝试将它们合并为 1 个函数,例如

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