迭代昂贵的asynchronous函数 – 内存约束,recursion?

我有一些问题,我认为是在node.JS服务器端应用程序中使用Promise的一个基本问题 – 不幸的是我看不到如何解决它,尽pipe看到其他类似的问题(我认为)。

基本上我的问题是这样的:我试图检索一些外部数据,然后处理它。 有很多数据,所以我必须逐页检索它。 另外考虑到数据的大小,我的服务器不能一次执行多个调用/进程,因为内存不足和服务器崩溃。 我不知道,直到执行时间,我必须检索多less页来获取所有的数据。

我已经尝试执行一个forEach循环与数组的页数然而,这显然不工作。 例如:

pages = [1,2,3,4]; pages.forEach( function(pageNumber){ veryMemoryExpensiveFunctionRetrievingAndProcessingPage(pageNumber).then( // handle the results); }) 

(这里的行为是所有函数都是同步执行的而服务器内存不足)。

我很困在这里 – 我知道我需要同步多次执行该function,但不知道从哪里开始这样做! 我也试图recursion,但是这又一次导致内存不足,因为每个调用都添加到堆栈中。

上一次完成时,您需要为每个页面获取承诺,而不是一次完成。 即

 function fetchAndProcessPages(i, handlePage) { retrievePage(pages[i]).then(page => { handlePage(page); if (i+1 < pages.length) fetchAndProcessPages(i+1, handlePage); }); } fetchAndProcessPages(0, page => console.log(page));