不能 return 来自 Axios 的结果

Can't return the result from Axios

我最近在做一个全栈项目。这也是我的第一个全栈项目。所以我今天想出了一个问题。 因此,我的后端将数据存储在 MongoDB 中,并且此函数 post 将数据存储到 MongoDB 数据库中,然后 return 如果成功则响应数据。如果没有成功,那么 returns error.My 相关的后端代码:

exports.registerOnlineUser = (req, res) => {
  User.findOne({ email: req.body.email }).exec((error, user) => {
    if (error) {
      res.status(400).json({ message: error });
    }
    if (user) {
      return res.status(400).json({
        message: 'User exists already',
      });
    }
    const { fullName, email, address, cardName, cardNo, expDate, cvv } =
      req.body;
    const userCategory = 'Online';
    const newUser = new User({
      fullName,
      email,
      address,
      cardName,
      cardNo,
      expDate,
      cvv,
      userCategory,
    });
    newUser.save((error, data) => {
      if (error) {
        return res.status(400).json({
          message: error,
        });
      }
      if (data) {
        return res.status(201).json({
          user: data,
        });
      }
    });
  });
};

所以前端的保存数据功能是这样的。在这个函数中

console.log(response);

也工作正常。它正在记录我输入的数据。

const saveFormData = async () => {
    await axios({
      method: 'post',
      url: 'http://localhost:7000/userInfo/registerOnline',
      data: registerData,
      validateStatus: (status) => {
        return true;
      },
    })
      .catch((error) => {
        console.log(error);
        return error
      })
      .then((response) => {
        console.log(response);
        return response;
      });
  };

但是下面的函数总是return结果为空值。因此,当我调用此函数和 console.log 时,我将 saveFormData 的 return 值设为 null。

try {
  const result = await saveFormData();

  console.log(result);
  alert('Your registration was successfully submitted!');
} catch (e) {
  alert(`Registration failed! ${e.message}`);
}

所以 为什么当我调用它时 return 该函数的值为空值 如何解决该问题? 提前致谢。

你的 saveFormData 函数没有 return 任何东西

const saveFormData = async () => {
    return axios({ //you need to return in your saveFormData scope also
      method: 'post',
      url: 'http://localhost:7000/userInfo/registerOnline',
      data: registerData,
      validateStatus: (status) => {
        return true;
      },
    })
      .catch((error) => {
        console.log(error);
        return error
      })
      .then((response) => {
        console.log(response);
        return response;
      });
  };

saveFormData 没有 return 值。 try/catch里面的return语句只是为了这些,对上面的功能没有影响。由于您已经使用 try/catch 块进行错误处理,因此您可以使用:

const saveFormData = async () => {
    return axios({
      method: 'post',
      url: 'http://localhost:7000/userInfo/registerOnline',
      data: registerData,
      validateStatus: (status) => {
        return true;
      },
    })
}