在 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);
}))

最新更新