Как перебрать массив по одной строке за раз? - PullRequest
0 голосов
/ 14 декабря 2018

Хорошо, у меня есть ОГРОМНЫЙ массив с более чем 10000 строк, и я хочу, чтобы цикл проходил по массиву по одной строке за раз, как я хочу подождать, пока не закончится функция, чтобы перейти к следующей строке в массиве.

Прямо сейчас цикл помещает строки так быстро, как может через мою функцию, которой у меня нет, потому что эти строки вставляются в запрос $.get ... И это делает WAY слишком много запросов за раз...

Вот мой код в настоящее время:

var sp = ["48343", "48383", "48934893", "438943", "47849345", "45843945", "47483923", "38445"];
for (var i = 0; i < sp.length; i += 1) {
    check(sp[i]);
}

и, пожалуйста, простите меня, если я не достаточно хорошо объяснил, вместо того, чтобы голосовать, пожалуйста, спросите меня, что объяснить, спасибо: D

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вам необходимо отправить весь массив на сервер за один запрос и выполнить проверку всего массива на сервере.Тогда ответом на запрос является массив тех, которые проходят проверку.Ваш текущий дизайн ужасен, пожалуйста, не делайте тысячи запросов на получение.

0 голосов
/ 14 декабря 2018

По умолчанию $.get() является асинхронным.

Проверьте ссылки ниже

Так что лучше, если вы делаете ваши вызовы синхронными (но проблема в том, что это устарело с jQuery 1.8)просто введя новое свойство async со значением false для объекта, переданного для вызова.

Но лучше, если вы не используете это, если вы используете версию jQuery> = 1.8.

Если нет, вы можете проверить следующие ссылки:

Примечание. «Таким образом, оператор вызова внутри цикла for будет ожидать завершения запроса, т. Е. Как только функция вернется, будет продолжена следующая итерация.

Наконец, ядумаю, использование веб-работников с async ajax get request будет лучшим выбором для вашего приложения.

Check https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers.

0 голосов
/ 14 декабря 2018

Из того, что я могу сказать, вы можете просто использовать setInterval для разметки ваших запросов.

Пример:

var sp = ["...", "..."];
var i = 0;
var interval = setInterval(function() {
  if (i >= sp.length) {
    clearInterval(interval);
  } else {
    check(sp[i++]);
  }
}, 5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...