我无法从异步函数中捕获错误

时间:2021-06-30 15:18:40

标签: javascript async-await promise

给定以下函数来更新后端的值:

const updateValues = async (arg1, arg2, arg3) => {
  try {
    const response = await axios.patch(
      ...
    );
    ...
    return response.data;
  } catch (err) {
    console.error(err.response);
    return {};
  }
};

我无法成功对 Promise 函数做出反应,这是我的实现:

const response = updateValues('bar', id, value1, value2, 'foo'
);
response
  .then(() => console.log('success:', response))
  .catch((err) => console.log('fail:', err));

我得到的是,不管 response 总是解决并且我永远不会发现错误,我做错了什么?

1 个答案:

答案 0 :(得分:2)

所以你需要决定你想在哪里捕捉被抛出的错误。目前,您正在捕获 updateValues 函数内部的错误。

如果你想处理 Axios 抛出的错误,你可以这样编写函数:

const updateValues = async (arg1, arg2, arg3) => {
  const response = await axios.patch(...); // If Axios throws an error will propagate up to the caller
  ...
  // You could also throw other errors here manually if you'd like
  return response.data;
};

然后你可以在调用站点处理错误:

updateValues('bar', id, value1, value2, 'foo')
  .then((data) => console.log('success:', data))
  .catch((err) => console.log('fail:', err)); // Thrown exception handled here.

如果您想了解更多信息:Here's a good article on JS exceptions & best practices.