我正在尝试编写一个简单的函数,该函数可以对服务器进行长时间轮询,并仅打印出对控制台的响应。
我不是javascript开发人员,回调函数使我感到困惑。
此代码有效:
const addr = "http://localhost:8080/action"
function longPoll(urls) {
try {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", urls, false);
xhttp.setRequestHeader("Content-type", "text/html");
xhttp.send();
var response = JSON.parse(xhttp.response);
console.log(xhttp.response);
longPoll(urls)
} catch (error) {
console.log(error.message);
longPoll(urls)
}
};
longPoll(addr);
console.log("end")
但是,永远不会打印“结束”。
在打开页面时同时运行longPoll()的最简单方法是什么?
编辑:
在注释的帮助下,我更改了似乎可以正常工作的代码:
const addr = "http://localhost:8080/action"
function poll() {
(async () => {
const response = await fetch(addr)
const data = await response.json()
console.log(data)
setTimeout(poll, 2000)
})()
}
poll();
console.log("end")
答案 0 :(得分:-1)
您应该在超时中调用回调,这样它才不会阻塞主线程。以下代码大约每200毫秒调用一次longPoll
const addr = "http://localhost:8080/action"
function longPoll(urls, delay = 5000) {
try {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", urls, false);
xhttp.setRequestHeader("Content-type", "text/html");
xhttp.send();
var response = JSON.parse(xhttp.response);
console.log(xhttp.response);
} catch (error) {
console.log(error.message);
}
setTimeout(longPoll, delay, urls, delay)
};
longPoll(addr, 200); // a call delay in milliseconds
console.log("end")