为什么react组件没有捕获axios错误

w9apscun  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(323)

我使用flask在python上编写了以下代码

@bp.route("/test", methods=["GET"])
def test():

    throw_error = True
    if throw_error : 
        return jsonify(message="Throwing an error"), 405

    return jsonify(message="Test message"), 200

在react上,我有一个具有以下功能的上下文设置

function testRequest(){
    const response = axios.get('/api/test')
    console.log(response)

}

我通过在另一个组件中单击按钮来调用此函数

async function handleButtonClick(e){
  e.preventDefault();
  try{
    await testRequest(); 

   }catch(error) { // DOESN'T EXECUTE??
    console.error("Error occured")
    setError("Error occurred in test method")
   }
}

为什么try没有捕捉到405错误?

r6hnlfcb

r6hnlfcb1#

你只能有效地等待承诺。 testRequest 没有回报的承诺。
它触发 axios.get ,将承诺转让给 response ,记录它,然后返回 undefined .
这个 try/catch 一点也不违背诺言。
您可以通过以下方式解决此问题:

function testRequest(){
    const response_promise = axios.get('/api/test')
    console.log(response_promise)
    return response_promise;
}

因此,承诺正在兑现 await 他在房间里哭了 try/catch .

rm5edbpk

rm5edbpk2#

通过以下对函数的修改,您将能够捕获错误。

async function testRequest() {
    const response = await axios.get('http://localhost:1337/sample/test');
    return response;
  }

 async function handleButtonClick(e:any) {
    e.preventDefault();
    try {
      await testRequest();

    } catch (error) { // DOESN'T EXECUTE??
      console.error("Error occured")
      console.log(error.mes);
    }
  }

相关问题