如何在axios中捕获status = cancelled?

pcww981p  于 2022-11-23  发布在  iOS
关注(0)|答案(3)|浏览(273)

我当前运行2台服务器:
1.使用react提供视图,react从使用express构建的REST API中检索数据。
1.为视图提供REST API。
以下是我为用户登录而执行的操作:

// Redux Action
export function loginUser(creds, role) {

  return dispatch => {
    // We dispatch requestLogin to kickoff the call to the API
    dispatch(requestLogin(creds));

    return axios.post(`${ROOT_URL}/login/${role}`, creds).then((response) => {
        console.log(response);

        if(response.status === 200) {
          // If login was successful, set the token in local storage
          localStorage.setItem('id_token', response.data);

          // Dispatch the success action
          dispatch(receiveLogin(response));

          return response;
        }
      }).catch(err => {
        // If there was a problem, we want to
        // dispatch the error condition
        dispatch(loginError(err.data));

        return err;
      });
  };
}

我特意断开了数据库以捕捉错误并查看发生了什么。因此,这是我在终端中看到的内容:

12:49:24 Project-0 Server is listening at port 3000
12:49:24 Project-0 Mongoose disconnected
12:49:24 Project-0 Mongoose connection error: MongoError: connect ECONNREFUSED 192.168.1.116:27017
12:49:34 Project-0 Wed, 13 Apr 2016 07:19:34 GMT express deprecated res.send(status): Use res.sendStatus(status) instead at app/index.js:61:7
12:49:34 Project-0 OPTIONS /login/admin Wed, 13 Apr 2016 07:19:34 GMT ::ffff:192.168.1.134 200 5.894
12:49:35 Project-0 POST /login/admin Wed, 13 Apr 2016 07:19:35 GMT ::ffff:192.168.1.134 - -

现在,当我提交登录表单时,状态从待定变为已取消

我们如何使用axios捕捉这种状态,或者我们必须在express本身中为此编写一个机制吗?

Axios 0.10.0

**注意:**我无法标记axios,因为标记不存在,我无法创建新的标记。

nlejzf6q

nlejzf6q1#

使用axios.isCancel()函数

.catch(err => { 
      if(axios.isCancel(err)) {
        // do something
      }
   }
)
vh0rcniy

vh0rcniy2#

实际上,您可以在catch语句中捕获错误(不成功的响应)。例如,您可以将其记录到控制台,如下所示:

.catch(err => {
        // If there was a problem, we want to
        // dispatch the error condition
        dispatch(loginError(err.data));
        console.log(err);
        return err;
      });
vuktfyat

vuktfyat3#

现在,当我提交登录表单时,状态从“待定”变为“已取消”。
发生这种情况是因为你在axios中设置了超时。当然,当请求超时时,axios会取消请求。默认情况下,超时是0,这意味着如果请求是 Never Ending,axios将永远不会超时。
我们如何使用axios来捕捉这种状态,或者我们必须在express本身中为此编写一个机制吗?
您可以检测到axios因取消而引发的错误。
1.正如@Rafal提到的:

.catch(error => { 
    if(axios.isCancel(error)) {
        // Your logic here
    }
}
)
  1. error.code
.catch(error => { 
    if(error?.code === "ERR_CANCELED") {
        // do something
    }
}
)
  1. error.name
.catch(error => { 
    if(error?.name === "CanceledError") {
        // request was cancelled..do something
    }
}
)

相关问题