Sto facendo un XMLHttpRequest
ogni secondo su un server, il server risponderà con nuovi messaggi. Per chiamare il XMLHttpRequest
ogni secondo, utilizzo la funzione setInterval()
all'interno di un numero SharedWorker
.SetInterval() è una funzione asincrona?
Tuttavia, dal momento che sto facendo una richiesta al secondo, vorrei sapere se setInterval()
è asincrono o no? Ad esempio, se una richiesta di XMLHttpRequest
impiega 3 secondi per terminare "a causa di un ritardo", avrò 3 richieste in corso allo stesso tempo o setInterval()
attendere fino al completamento della prima richiesta prima di attendere 1 secondo e inviare un altro richiesta?
Ecco il mio codice
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);
È asincrono, ma non si avranno 3 richieste in contemporanea, poiché l'intervallo di funzione è 1 secondo. La funzione fornita verrà eseguita ogni secondo, indipendentemente da cosa. – MinusFour
@MinusFour allora avrò almeno 2 in contemporanea. Se il server impiega 10 secondi per rispondere, la richiesta continuerà a venire. Come posso evitare che ciò accada? –
Si potrebbe fare con una promessa, posso fornire una risposta per questo se la domanda è come interrompere una promessa. – MinusFour