Непреодолимая петля

Я улучшил вопрос, добавив свой код.

Я застрял в создании неостановимой петли, пожалуйста, помогите мне.

Я вызываю 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, и его нельзя остановить.

Пример кода возможно? что ты уже испробовал?

Ludovit Mydla 09.02.2019 00:50

Что, если бы вам нужно было вызывать каждый URL только 1 раз? Вы можете справиться с таким случаем?

PM 77-1 09.02.2019 00:53

Звонки асинхронные?

guest271314 09.02.2019 01:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
4
148
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Здесь вам нужно будет добавить код вызова 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>

Код в ответе содержит ошибку.

guest271314 09.02.2019 01:03

Есть? Я запустил его на ограниченных циклах, и это, похоже, сработало.

Bibberty 09.02.2019 01:09

Зависает ли вкладка браузера в какой-либо момент во время процесса? В частности console?

guest271314 09.02.2019 01:11

Это потому, что он был написан как бесконечный, и здесь это не сработает.

Bibberty 09.02.2019 01:12

Но это отлично сработает, например, на сервисном работнике. Я отредактировал, чтобы люди могли попробовать.

Bibberty 09.02.2019 01:12

Бесконечные циклы не обязательно должны зависать в браузере или крутить HD. Как ServiceWorker связан с вопросом?

guest271314 09.02.2019 01:13

@ guest271314 более чем справедливо, это можно сделать с помощью интервального вызова. Тогда был бы более дружелюбным.

Bibberty 09.02.2019 01:15

В 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-адресов, прежде чем вы это узнаете!

Другие вопросы по теме