我每秒都会向服务器发送一个XMLHttpRequest
,服务器会以新消息响应。要每秒调用XMLHttpRequest
,我使用SharedWorker
内部的setInterval()
函数。setInterval()是一个异步函数吗?
但是,由于我每秒都在提出请求,所以我想知道setInterval()
是否是异步的?
例如,如果一个XMLHttpRequest
请求了3秒完成“由于延迟”,我将有3个请求在同一时间去或将setInterval()
等待,直到它等待1秒发送另一个前的第一个请求完成请求?
这里是我的代码
function checkQueue(url)
{
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", reqListener);
xhr.open('GET', url, true);
xhr.send();
}
function reqListener()
{
var queue = JSON.parse(this.responseText);
notifyAllPorts(queue);
console.log(this.responseText);
}
setInterval(
function() {
checkQueue('/add-ons/icws/push.php')
}
, 1000);
它是异步的,但你不会有3个请求在同一时间进行,因为函数间隔为1秒。无论如何,提供的函数都会每秒执行一次。 – MinusFour
@MinusFour然后我会至少有两个同时进行。如果服务器需要10秒钟响应,则请求将继续。我怎样才能防止这种情况发生? –
你可以用承诺来做到这一点,如果问题是如何间隔承诺,我可以提供一个答案。 – MinusFour