Я улучшил вопрос, добавив свой код.
Я застрял в создании неостановимой петли, пожалуйста, помогите мне.
Я вызываю 5 URL API:
Каждый URL должен вызываться по определенному номеру:
URL1 should be called 4 times
URL2 should be called 10 times
URL3 should be called 8 times
URL4 should be called 9 times
URL5 should be called 6 times
Пожалуйста, взгляните на мой код ниже: https://www.codepile.net/pile/7Plo91MN
Цикл должен начинаться с URL1, а когда он достигает URL5, он должен снова начинаться с URL1, и его нельзя остановить.
Что, если бы вам нужно было вызывать каждый URL только 1 раз? Вы можете справиться с таким случаем?
Звонки асинхронные?
См. stackoverflow.com/help/как спросить, stackoverflow.com/help/mcve



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Здесь вам нужно будет добавить код вызова URL.
let arrUrls = [
["URL1", 4],
["URL2", 10],
["URL3", 8],
["URL4", 9],
["URL5", 6]
];
let sendNum = 0;
function callUrl(url, rpt){
for (let i = 0; i < rpt; i++) {
// calling code
console.info(`called ${url} - ${i}/${sendNum}`);
}
};
let x = 0;
while(x<4) // Change this to while(true) for infinite loop
{
sendNum = 0;
arrUrls.forEach(u => {
sendNum++;
callUrl(u[0], u[1]);
});
x++;
}Согласно комментариям от гостя. Это более дружественная к пользовательскому интерфейсу версия. Также я добавил 3-секундный сон и кнопку остановки для удобства.
document.querySelector('button').addEventListener('click', (e) => {
if (interval !== undefined) {
clearInterval(interval);
console.info('Stopped !!');
}
});
let arrUrls = [
["URL1", 4],
["URL2", 10],
["URL3", 8],
["URL4", 9],
["URL5", 6]
];
let sendNum = 0;
let interval = undefined;
function callUrl(url, rpt) {
let count = 0;
for (let i = 0; i < rpt; i++) {
// calling code
count++;
}
console.info(`called ${url} - ${count} times - on loop: ${sendNum}`);
};
interval = setInterval(() => // Change this to while(true) for infinite loop
{
console.clear();
sendNum++;
arrUrls.forEach(u => {
callUrl(u[0], u[1]);
});
}, 3000);<button>Stop Me</button>Код в ответе содержит ошибку.
Есть? Я запустил его на ограниченных циклах, и это, похоже, сработало.
Зависает ли вкладка браузера в какой-либо момент во время процесса? В частности console?
Это потому, что он был написан как бесконечный, и здесь это не сработает.
Но это отлично сработает, например, на сервисном работнике. Я отредактировал, чтобы люди могли попробовать.
Бесконечные циклы не обязательно должны зависать в браузере или крутить HD. Как ServiceWorker связан с вопросом?
@ guest271314 более чем справедливо, это можно сделать с помощью интервального вызова. Тогда был бы более дружелюбным.
В PHP вы можете использовать InfiniteIterator. Как ни странно, он повторяется бесконечно.
$urls = ['url1' => 4, 'url2' => 10, 'url3' => 8, 'url4'=> 9, 'url5' => 6];
$unstoppable = new InfiniteIterator(new ArrayIterator($urls));
foreach ($unstoppable as $url => $times) {
for ($i = 0; $i < $times; $i++) {
// call $url
}
}
Вы будете заблокированы с каждого из этих URL-адресов, прежде чем вы это узнаете!
Пример кода возможно? что ты уже испробовал?