Как сделать задержку между асинхронными запросами в JavaScript?
Необходимо во внутреннем цикле отсылать запрос через каждые 1 сек, а во внешнем задержка 15 сек.
То есть отсылается часть запросов через каждые 1 сек, потом задержка 15 сек и потом другая часть запросов через 1 сек между ними.
Пробовал через setInterval(), но сначала проходит весь цикл, и потом сразу все запросы разом отсылаются.
Как решить проблему?
function start_job(tickets_list, job_list) {
for(let i=0; i < tickets_list.length; i++) {
for(let j=0; j < job_list.length; j++) {
let uri = 'https://some_address' + tickets_list[i];
let xhr = new XMLHttpRequest();
let str = job_list[j];
xhr.open('PUT', uri, true);
xhr.send(str);
}
}
}
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
function start_job(tickets_list, job_list) {
for(let i=0; i < tickets_list.length; i++) {
for(let j=0; j < job_list.length; j++) {
setTimeout(function() {
let uri = 'https://some_address' + tickets_list[i];
let xhr = new XMLHttpRequest();
let str = job_list[j];
xhr.open('PUT', uri, true);
xhr.send(str);
}, (i * 15 + j + 1) * 1000);
}
}
}
Автор решения: vsemozhebuty
→ Ссылка
Если можете превратить функцию в асинхронную, можно так:
function wait(seconds) {
return new Promise((resolve) => { setTimeout(resolve, seconds * 1000); });
}
async function start_job(tickets_list, job_list) {
for(let i=0; i < tickets_list.length; i++) {
for(let j=0; j < job_list.length; j++) {
let uri = 'https://some_address' + tickets_list[i];
let xhr = new XMLHttpRequest();
let str = job_list[j];
xhr.open('PUT', uri, true);
xhr.send(str);
await wait(1);
}
await wait(15);
}
}