我通过添加代码来改进问题。
我坚持做一个不可阻挡的循环,请帮助我。
我正在调用 5 个 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 调用代码。
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.log(`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++;
}
根据客人的评论。这是一个对UI更友好的版本。为了方便起见,我还添加了 3 秒睡眠和停止按钮。
document.querySelector('button').addEventListener('click', (e) => {
if(interval !== undefined) {
clearInterval(interval);
console.log('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.log(`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>
在 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 中的每一个!