javascript - 端点的异步轮询
问题描述
我有点坚持如何实现一个函数来轮询某个 HTTP 端点,直到我得到某个结果(即端点更新),但我希望它每 x 秒发送一个请求,当第一个“正确”的响应回来了,我想停止/丢弃所有其他进程并处理我得到的响应。
这意味着在任何给定时间都可以有多个“正在运行”的请求,我不确定如何实现这一点,即在发出另一个请求之前不要等待来自先前请求的响应。
我正在使用request
本质上已经是异步的模块,但我不确定如何在不等待之前的请求完成的情况下每 x 秒“触发”一次请求。
解决方案
您可以使用setInterval
. 像这样的东西可以工作:
function pollIt() {
return new Promise(resolve => {
let done = false;
const interval = setInterval(async () => {
if(done) {
return;
}
const req = await fetch('/test');
if(done) {
return;
}
if(req.status === 200) {// assuming HTTP 200 means "OK", could be something else
done = true;
clearInterval(interval);
resolve(await req.json());
}
}, 1000)
});
}
推荐阅读
- r - 创建要填充的矩阵而不指定其维度
- python - Python - 绘制天线辐射图
- php - 如果单击删除链接,则向用户显示 JavaScript 确认弹出框
- python - 如何将多个稀疏和密集矩阵组合在一起
- neo4j - Cypher 根据特定关系连接匹配的节点
- lua - 如何将所有同名部分(对象)传送到我的角色?
- javascript - 将构造函数作为参数传递(语言设计)
- python - 如何在seaborn中更改X轴范围
- powerbi - 每周总工作时间减少/增加 (Power BI)
- header - .Net Framework 4.5 Soap 请求 GZip 标头不正确 错误