У меня возникли некоторые проблемы с тем, что, по моему мнению, является основной проблемой использования обещаний в приложении на стороне узла node.JS. К сожалению, я не вижу, как его разрешить, несмотря на другие подобные вопросы (я думаю).Итерация через дорогую функцию async - ограничения памяти, рекурсия?
В основном моя проблема заключается в следующем: Я пытаюсь получить некоторые внешние данные, а затем обработать их. Существует много данных, поэтому я должен получить его по страницам. Кроме того, учитывая размер данных, мой сервер не может одновременно выполнять несколько вызовов/процессов, так как у меня закончилась нехватка памяти, и сервер аварийно завершает работу. Я не знаю до времени выполнения, сколько страниц мне нужно получить, чтобы получить все данные.
Я попытался выполнить цикл forEach с массивом количества страниц, однако это явно не работает. например:
pages = [1,2,3,4];
pages.forEach(function(pageNumber){
veryMemoryExpensiveFunctionRetrievingAndProcessingPage(pageNumber).then(
// handle the results);
})
(поведение здесь заключается в том, что все функции выполняются синхронно, а на сервере заканчивается память).
Я довольно застрял здесь - я знаю, что мне нужно выполнять эту функцию несколько раз синхронно, но не знаю, с чего начать! Я также попытался выполнить рекурсию, однако это снова вызывает нехватку памяти, поскольку каждый вызов добавляется в стек.
Похоже, вам нужно работать над оптимизацией решения на стороне сервера вместо клиентской стороны. –
Привет, извинения. Я должен был уточнить, что это приложение на стороне сервера node.js. Я извлекаю данные из внешней службы, меняя ее и вставляя в свою собственную БД. Я могу только восстановить его с разбивкой по страницам плюс мой собственный сервер, похоже, способен удерживать определенное количество страниц в памяти без сбоев. Поэтому я хочу принудительно выполнить последовательную обработку страниц на моей стороне сервера –
@JDeane Прежде всего: http://www.codexpedia.com/javascript/increasing-the-memory-limit-in-node-js/ – Niezborala