electron - 在 Electron 的 net.request 上设置连接超时
问题描述
我正在尝试使用建议的net.request
库从 Electron 应用程序的渲染器进程建立连接,如下所示:
const resData: string = await new Promise(((resolve, reject) => {
const req = net.request({
method: "POST",
url: url,
});
req.setHeader("Content-Type", "text/xml");
req.write(xml);
req.on("response", (response) => {
resCode = response.statusCode;
response.on("error", (e) => {
reject(e);
});
response.on("data", (data) => {
resolve(data.toString());
});
});
req.on("error", (e) => {
reject(e);
})
req.end();
}));
一切正常,但是当主机无法访问时,几乎需要一分钟才能失败。显然图书馆没有提供任何设置超时的方法,我是否必须Promise.race()
使用计时器并忽略错误或者有更清洁的方法?
谢谢
解决方案
有点晚了,但我这样做是为了超时,
request.on("response",(response=>{
response.on('data', (chunk) => {
if(response.statusCode >= 200 && response.statusCode < 210 ){
try{
resolve({statusCode : response.statusCode , data : JSON.parse(chunk)})
}catch(e){
resolve({statusCode : response.statusCode , data : chunk.toString()})
}
}else{
reject(`Failed to Do Request , Status Code : ${response.statusCode}` )
}
})
setTimeout((()=>{!response && RequestOptions?.timeout ?rejects("Task Timed out"):response}), RequestOptions?.timeout);
}))
推荐阅读
- sql - SQL Server - 在两列中反向验证重复值[内部示例]
- python - 如何将 DataFrame.groupby 中的组“保存”到单独的变量中?
- git - git:存储库会自然膨胀吗?有什么好的做法可以缓解这种情况
- templates - Proper way to create index template that is applied to all in ElasticSearch
- charts - Jasperrerports 饼图不显示?
- c++ - 整数溢出的奇怪行为
- aws-lambda - 无法使用 terraform 在 AWS 控制台上更新 lambda 代码
- vue.js - vuetifyjs v-simple-table - change the loading status of the button on click
- c - cs50 的可读性。在“if”行无缘无故地进行了有价值的更改
- css - Google Recaptcha 没有隐藏在移动设备上