反应本机,Axios和未处理的承诺拒绝

时间:2020-06-15 06:57:15

标签: javascript react-native axios

我在我的React-Native应用程序中使用Axios与Nodejs后端进行通信,并在使用react-redux分派来调用将利用Axios的操作。但是,无论我尝试什么,只要有任何类型的错误,我都会得到“未处理的承诺拒绝”。这让我非常沮丧,我要放弃使用Axios,而只是回到使用提取。我已经用谷歌搜索了这个问题(这似乎确实很普遍),但是还没有找到任何可靠的解决方案。

以下是我在操作中如何使用Axios将请求发送到Nodejs后端服务器的示例:

    export const getAppointments = (userId) => {
  return async (dispatch) => {
      const request = axios
        .get(`${SERVER_BOOKINGS}/upcoming_appointments/${userId}`)
        .then((response) => {
          let ourPayload = {};
          ourPayload.success = response.data.success;
          if (ourPayload.success) {
            ourPayload.bookings = response.data.bookings;
            dispatch({
              type: GET_UPCOMING_APPOINTMENTS,
              payload: ourPayload,
            });
          } 
        })
        .catch((err) => {
          console.log("caught an error, HERE:", err);             
          //throw err
        });   
  };
};

这是我用来调用此操作的代码:

 const getAppointments = async () => {
    try {
      await dispatch(
        bookingActions.getAppointments(userObject.userData.userId)
      );
    } catch (error) {
      console.log("we actually caught an axios error client side!");
    }
  }

如果我完全保留上面的代码,并故意从Nodejs代码引起错误响应,则会收到一条console.log消息,内容为“在此处捕获了错误”,但从实际分派的catch块中未得到任何结果动作(第二个代码块)。

如果我取消注释第一个catch块中的throw err行,我仍然会获得console.log,仍然无法从第二个catch块中得到任何东西....但是现在我收到了Unhandled Promise Rejection警告。

现在,只要没有错误,此代码就可以很好地工作,并且只要有一个错误,它就一文不值。老实说,我不知道问题出在axios,react-redux派遣还是仅仅因为我无法理解Promises的工作方式,但是我已经浪费了很多时间去弄清楚什么捕获错误应该是一个非常简单的问题...而且由于这个原因,我在这个项目上的进度落后了。任何建议/帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我认为是由于“ bookingActions.getAppointments”不是Promise函数引起的,因此不需要“尝试捕获”它。 尝试像这样更改它:

const getAppointments = () => dispatch(bookingActions.getAppointments(userObject.userData.userId));