javascript - 如何使用 Fetch 在 React 中处理“ECONNREFUSED”?
问题描述
我在 React 中有以下与第三方 api 交互的代码。当 Avaya One-X 客户端未在目标 PC 上运行时,我在控制台中收到错误连接被拒绝,这是正常的。问题是代码设置为每 5 秒运行一次,并且只要 one-x 客户端未运行,控制台就会充满这些错误。
我怎样才能更好地处理这个?没有记录这么多次会很好。
fetchData = (url) => {
return new Promise((res, rej) => {
fetch(url)
.then((r) => r.text())
.then((text) => {
res(text);
})
.catch((e) => rej(e));
});
};
getLogs = async () => {
try {
const { user } = this.props.auth;
const regxmlPromise = this.fetchData(
`http://127.0.0.1:60000/onexagent/api/registerclient?name=${user.id}`
);
const clientIdPromise = this.fetchData(
`/api/avaya/${user.id}/getclientid/`
);
const resolves = await Promise.all([regxmlPromise, clientIdPromise]);
const [registration, clientId] = resolves || [];
const nextNotification = await this.fetchData(
`http://127.0.0.1:60000/onexagent/api/nextnotification?clientid=${clientId}`
);
if (registration) {
const regxml = new XMLParser().parseFromString(registration);
if (regxml.attributes.ResponseCode === "0") {
axios.post(`/api/avaya/${user.id}/register/`, regxml);
console.log("ClientId sent!");
}
}
if (nextNotification) {
const xml = new XMLParser().parseFromString(nextNotification);
if (
xml.children[0].name === "VoiceInteractionCreated" ||
xml.children[0].name === "VoiceInteractionMissed" ||
xml.children[0].name === "VoiceInteractionTerminated"
) {
console.log(xml);
console.log(xml.children[0].name);
axios.post(`/api/avaya/${user.id}/logcalls/`, xml);
}
}
} catch (error) {
console.log(error);
}
};
timer = (time) => {
const date = new Date(time);
return `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
};
componentDidMount() {
this.getLogs();
this.callsInterval = setInterval(this.getLogs, 5000);
}
componentWillUnmount() {
clearInterval(this.callsInterval);
}
为了让事情更清楚,这里是控制台的屏幕截图。我收到连接被拒绝的 Get 错误以及我捕获并记录的实际错误。因此,即使我发现错误并且什么都不做,无论如何我仍然会在控制台中拒绝连接。
一件有趣的事情是,如果我使用 fetch-node,我会得到不同的行为和错误消息。node 的错误是一个对象并且具有不同的道具。在 React 中,如果我 console.log 获取请求错误,我只会得到“TypeError:无法获取”
解决方案
因此,如果您只是想隐藏网络错误消息,您可以单击 Chrome 中的齿轮箱并点击“隐藏网络”。显然在 Chrome 中,即使您发现网络错误,它们仍会冒泡到控制台,除非您选择它。我使用的是 Firefox,一开始并没有发现问题。
可以在此处找到更多信息:Catching net::ERR_NAME_NOT_RESOLVED 用于修复错误的 img 链接
推荐阅读
- r - R writetable 修改数据框中的数字
- python-3.x - 如何使用 .to_csv() 避免在行尾出现双引号
- python - 有没有办法将每个迭代的值分别存储在新变量中的 for 循环中?
- scala - getFromDirectory 在 akka-http 路由中不起作用
- java - Camel from smb - 结合“delete=true”和按文件名过滤
- javascript - 当 ng-show 值等于 false 时的 AngularJs 动画
- javascript - 响应式 jQuery Datatables 无法获取行的详细信息
- r - R循环遍历两个向量并将结果存储在数据框中
- python - pdfminer 提取的文本包含 CID 字符
- haskell - 如何将此 let/where 函数转换为 Haskell 中的 Lambda