【问题标题】:Set connection timeout on Electron's net.request在 Electron 的 net.request 上设置连接超时
【发布时间】:2021-04-12 09:00:54
【问题描述】:

我正在尝试使用建议的 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() 并忽略错误或者有更清洁的方法?

谢谢

【问题讨论】:

    标签: electron httprequest


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 2014-08-17
      • 1970-01-01
      • 2012-06-14
      • 2015-11-23
      相关资源
      最近更新 更多