我是通过http请求从设备上实时读取数据的,但是我现在这样做的方式是这样的:
setInterval(() => {
for (let request of requests) {
await request.GetData();
}
}, 1000);然而,有时网络中有延迟,由于有4-5个请求,有时它们不会在一秒内全部完成,所以它们开始堆叠,直到设备最终开始超时,所以我需要以某种方式摆脱setInterval。增加时间不是一种选择。
本质上,我希望它们被困在无限循环中,我可以添加一个内部计时器,让请求在上次运行后的半秒或一秒后再次运行,但我如何让它们陷入无限循环,而不会阻塞应用程序的其余部分?
或者是让setInterval在开始计算1秒间隔之前等待所有请求完成的方法?
发布于 2020-07-25 02:34:44
尝试:
(async () => {
while (true) {
for (let request of requests) {
await request.GetData();
}
await new Promise((resolve) => setTimeout(resolve, 1000));
}
})();这只会在所有请求完成后才开始等待,从而防止它们堆叠。
或者,在async函数内部,使用:
while (true) {
await Promise.all(requests.map(request => request.GetData()));
await new Promise((resolve) => setTimeout(resolve, 1000));
}这是不同的,因为对request.GetData()的所有调用都将并发运行,这可能是您想要的,也可能不是。
https://stackoverflow.com/questions/63079524
复制相似问题