javascript - ReactJS Hook 错误处理不会捕获错误
问题描述
我试图捕捉我收到的一些 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
块不会捕获它。尝试直接从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
}
推荐阅读
- python-3.x - 以 datetime 为索引的 Pandas 系列的平均值,但可能缺少数据
- drupal - Drupal phpmailer 自定义邮件插件 - 发送电子邮件时出错(从 xxx 到 yyy,未设置回复)
- css - 使动态网格项从左开始
- javascript - Django 在 ajax 请求的生产中出现错误
- angular - 在 POST Api 中提交之前,在 Div 中获取并显示反应式表单的 FormArray 值
- javascript - Firebase - 未捕获的类型错误:database.ref 不是函数
- ios - 如何将 collectionView 放置在相应的 tableView 部分中
- c# - 异常 - System.ServiceModel.Security.SecurityNegotiationException:“无法为 SSL/TLS 安全通道建立信任关系
- html - 为什么 flex 属性不能正常工作?
- javascript - 如何使用 CommonCrypto 快速解密