Разъяснения
Если это занимает некоторое время, почему бы не использовать асинхронный подход, при котором вы можете обрабатывать сумму 'x' за раз, то есть вы можете использовать setTimeout
и рекурсию или setInterval
, просто чтобы вы могли обработать блок информация / данные за один раз.
В этом примере вы можете видеть, что есть функция onIterate
и функция onComplete
, оба они используются в разных сценариях, вы можете использовать функцию onIterate
для каждой итерации до iterate
функция завершена. Как только вы выполните итерацию, вы можете запустить функцию onComplete
и можете вносить любые изменения, которые вам нравятся, например, обещания или что-то еще, что вам нравится.
Это также может быть лучшим подходом для сервера, поскольку вы позволяете времени сервера восстановиться после последнего запроса. В качестве альтернативы вы можете изменить свой внутренний код, чтобы он был более эффективным и т. Д., Вы могли бы использовать некоторые параметры limit
и offset
в своем запросе, чтобы сервер не обрабатывал слишком слишком данные за один раз.
// A function to fire when the ajax request has finished.
const onSuccess = data => {
console.log(data);
};
// Simulate the ajax request.
const getData = (i, callback) => {
setTimeout(() => {
console.log(i);
return callback(i);
}, 500);
}
// A function to fire once complete.
const onComplete = () => console.log('Finished');
// A function to fire if it's not finished/complete.
const onIterate = () => console.log('NOT finished yet');
// A function to iterate, break the loop up into chuncks.
const iterate = (start, end, delay) => {
const process = data => {
iterate(++start, end, delay)
if (start > end) {
onComplete(data);
} else {
onIterate(data);
}
};
if (start <= end) {
setTimeout(() => {
getData(start, process);
}, delay);
}
};
// A starting point.
const start = () => iterate(0, 10, 1500);
// Just start the function.
start();