我有一个PHP脚本循环(几千次)。每个循环都请求一个分页URL,该URL返回JSON中的一些结果。每个结果至少需要2次API命中才能请求更多信息。完成所有这些后,我将其构建为一个用于索引/存储的数据包。
在PHP中,这很容易,因为它自然是同步的。
我正在将其移至NodeJS设置并发现很难在NodeJS中优雅地执行此操作。
如果我进行for循环,初始HTTP请求(通常是基于承诺的)几乎会立即完成,将请求的解析留给promise处理程序。这意味着所有数千个页面请求最终会被并行触发。这也意味着我必须在承诺解决方案中链接子请求(这导致进一步的承诺链,因为我必须等待那些解析)。
我尝试过使用async / await方法,但是他们似乎不能很好地使用for循环(至少是forEach)。
这大致是我现在正在使用的,但我开始认为它完全错了,我可以使用回调来触发下一个循环?!
title
答案 0 :(得分:2)
我尝试过使用async / await方法,但它们似乎不能很好地与for循环(或至少forEach)一起使用。
是的,async
/await
does not play nicely with forEach
. Do not use forEach
!但是将await
置于正常的for
循环中可以正常运行:
(async () => {
for (let page = START_PAGE; page < MAX_PAGES; page += 1) {
console.log(`Processing page ${page}...`);
const response = await getList(page);
const data = await Promise.all(response.body.list.map(processResult));
console.log('DATA DONE', data);
console.log(`Page ${page} done!`);
}
})();