javascript - ReactJS Hook 错误处理不会捕获错误

标签 javascript reactjs error-handling try-catch matrix-synapse

我试图捕捉我收到的一些 API 调用的 404 错误。
我正在使用矩阵 API,需要从他们的 id 中获取房间名称,这是有效的。其中一些没有返回我试图捕捉的 404 错误的名称。不幸的是,这不起作用,我不明白我哪里出错了。代码本身执行,但它仍然在控制台中抛出 404。

const JoinedRooms = () => {
  const [answer, setAnswer] = useState([]);
  const [isError, setIsError] = useState(false);

  const getAnswer = async () => {
    const res = await fetch(`https://example.com/_matrix/client/r0/joined_rooms`, {
      headers: {
        "Authorization": `Bearer ${localStorage.getItem('mx_access_token')}`
      }
    });

    const answer = await res.json();

    const getNames = await Promise.all(answer.joined_rooms.map(async (roomId) => {
      setIsError(false);
      const res = await fetch(`https://example.com/_matrix/client/r0/rooms/${roomId}/state/m.room.name`, {
        headers: {
          "Authorization": `Bearer ${localStorage.getItem('mx_access_token')}`
        }
      });
      try {
        const roomName = await res.json();
        return roomName.name;
      } catch (error) {
        setIsError(true);
      }
    }));
    setAnswer(getNames);
  }

  useEffect(() => {
    getAnswer();
  }, []);

  return answer;
}

export default JoinedRooms;

最佳答案

404 状态码不会 throw一个错误,所以你的 try...catch block 不会捕获它。尝试直接从 res 获取 404返回的对象。

      const res = await fetch(`https://example.com/_matrix/client/r0/rooms/${roomId}/state/m.room.name`, {
        headers: {
          "Authorization": `Bearer ${localStorage.getItem('mx_access_token')}`
        }
      });
      if (res.status === 404) {
        // handle error
      }

关于javascript - ReactJS Hook 错误处理不会捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64248905/

相关文章:

php - Composer -Windows安装程序被卡住

php - 区分 PHP 错误和应用程序错误

javascript - 使用 CommonJS 的 react 路由器历史记录

javascript - 是否可以在不附加 ".js"扩展名的情况下在 Dojo 中加载脚本

javascript - 使用 AngularJS 和 javascript 显示/隐藏数组中的元素

css - 与浏览器设备模拟器相比,iPhone 上的字体大小是原来的 2 倍?

javascript - 如何在 React Static Boilerplate 中创建 webpack 导入别名?

javascript - 气泡图:Cannot read property 'parts/Globals.js' of undefined

PHP 删除功能不起作用

javascript - 选择不是开始于但结束于之间的所有内容