当前位置: 首页 > 知识库问答 >
问题:

javascript - 为什么 axios 在 catch 以后依然还在执行上面的逻辑?

连德义
2023-10-24

我想问为什么接口在 500 之后依然会进行跳转呢?难道不是 catch 然后弹窗报错了么?

const Api_Common = async (Path: string, Function: string, Params: any = {}) => await axios    .post(`host`, Params)    .then((data: Response) => data.data.Response)    .catch((e) => {        return ErrorState.dispatch(Publish(e.response.data.Error))    })
const Api_Account_Register = (mobile: string, password: string, captcha: string) => Api_Common( Path, "account_register", {    mobile: mobile,    password: password,    captcha: captcha})
 Api_Account_Register( mobile, password, code )            .then(() => messageApi.success('注册成功').then(() => navigate('/首页')))

共有2个答案

华昕
2023-10-24

Api_Common确实catch了,但是catch没有继续把错误抛出,catch返回了一个新的promise,也就继续执行Api_Account_Register后面的then

MDN - Promise.catch

阎唯
2023-10-24

从你提供的代码来看,catch 语句是在 Api_Common 函数中定义的,这个函数捕获了 axios 请求中可能出现的错误。当接口返回状态为 500 时,axios 将会抛出一个错误,这个错误会被 catch 语句捕获,然后调用 ErrorState.dispatch(Publish(e.response.data.Error)) 弹窗报错。

如果你在接口返回 500 之后依然看到了跳转,那么可能是你的 catch 语句没有正确捕获到错误,或者你的错误处理逻辑存在问题。

请检查以下几点:

  1. 确保 catch 语句是在正确的地方调用的。在你的代码中,catch 语句是在 Api_Common 函数中定义的,这个函数会捕获所有通过该函数发送的 axios 请求的错误。
  2. 确保你的服务器返回的错误信息是正确的。在你的代码中,错误信息存储在 e.response.data.Error 中,你需要确保服务器返回的错误信息能正确地被 axios 获取并存储到这个变量中。
  3. 检查你的错误处理逻辑。在你的代码中,错误被捕获后,会调用 ErrorState.dispatch(Publish(e.response.data.Error)) 弹窗报错。你需要确保这个逻辑能正确地处理错误。

如果以上都没有问题,那么可能需要进一步检查你的代码或者调试你的程序来确定问题的原因。

 类似资料:
  • 据我所知,promise是可以解析()或拒绝()的东西,但我惊讶地发现,promise中的代码在调用解析或拒绝后仍继续执行。 我认为resolve或reject是exit或return的异步友好版本,它将停止所有立即的函数执行。 有人能解释一下为什么下面的示例有时在解析调用后显示console.log的背后思想吗: 杰斯宾

  • 问题内容: 我想知道以下代码的行为背后的机制是什么: 我的理解是不 返回 函数,而是 关闭连接/结束请求 。这可以解释为什么我仍然可以在命令后执行代码(我查看了快速源,但它似乎不是异步函数)。 还有其他我可能会想念的东西吗? 问题答案: 当然可以结束HTTP响应,但是它对您的代码没有做任何特殊的事情。 即使您已结束回复,也可以继续做其他事情。 但是,您 无法 做的是利用进行任何有用的操作。由于响应

  • 我是JS的新手,正在学习promise。我面临的困惑是,then()中的回调被推送到作业队列中。以下是一个例子: 所以,我们有promise,这是通过console.log('Done')解决的。之后,console.log('Done')被传递给then(),then()中的回调被传递给作业队列。为什么?在从asynchronous setTimeout获得数据之后,为什么需要将callback

  • 问题内容: 我正在尝试执行此命令 和 都不起作用(返回空白输出) 有人知道为什么吗? 问题答案: 因为top是一个交互式程序,旨在在终端上运行,而不是从脚本中执行。您可能需要运行带有参数的“ ps”命令,这些命令将按cpu利用率对输出进行排序。 http://www.devdaily.com/linux/unix-linux-process-memory-sort-ps-command- cpu

  • 问题内容: console.log(0.5 | 0); // 0 console.log(-1 | 0); // -1 console.log(1 | 0); // 1 为什么返回零,但任何整数(包括负数)都返回输入整数?单个管道(“ |”)有什么作用? 问题答案: 这是按位或。 由于按位运算仅对整数有意义,因此将被截断。 是,对于任何人。

  • 我还检查了调试,它将语句=>if(sum==1)返回true;但它也在执行更多的语句。