首页 > 解决方案 > 在 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()使用计时器并忽略错误或者有更清洁的方法?

谢谢

标签: electronhttprequest

解决方案


有点晚了,但我这样做是为了超时,

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

推荐阅读