所以我一直在用电子工作来构建一个cli / gui app。我有一个进度条,需要每隔一段时间运行一次间隔来刷新进度条。最近我们想在詹金斯运行这个,所以进度条刷新80毫秒将是非常烦人的。我添加了一些代码来清除间隔,如果设置了某个环境变量,然后由于某种原因,应用程序在发送http请求后开始挂起。服务器永远不会收到请求,应用程序只会坐在那里。经过大量的调试后,我发现在代码中的任何地方放置一个setInterval(() => { }, 80);
(一个在任何时间内做任何事情或什么都不做的事情)可以解决问题。谁看过这个吗?我觉得我疯了!
修改 在请求上设置超时将使请求在超时后失败。
修改
所以我无法向您显示确切的代码,但这里是其中一个请求调用的jist。
return new Promise((resolve, reject) => {
request.put({
url: this.buildUrl(armada, '/some-path'),
body: vars,
json: true
}, (err, resp, body) => {
logger.comment('err "%s"', JSON.stringify(err));
logger.comment('resp "%s"', JSON.stringify(resp));
logger.comment('body "%s"', JSON.stringify(body));
let e = this.handleError(err, resp, body, 'Error getting stuff');
if (e) { return reject(e); }
logger.comment('got back body "%s"', body);
resolve(resp);
});
});
然后如果我在某处有间隔,它就不会挂起。如果我不这样做。
我可以将此代码粘贴到我的代码中,一切都开始工作
setInterval(() => { }, 80);
现在这不是一个特定的请求,因为该应用程序提出了很多不同的请求。它所做的任何请求都可以挂起。他们并不总是挂起来。大约十分之一的时间,一切都可以满足个人要求。