Javascript 如何在异步函数中重置for循环?

Javascript 如何在异步函数中重置for循环?,javascript,node.js,puppeteer,puppeteer-cluster,Javascript,Node.js,Puppeteer,Puppeteer Cluster,所以我找到了一个网站,它有非常酷的图片,我想搜集一些数据。该网站在大约5年内没有得到任何更新,我试图联系其所有者获取某种API,但没有得到任何回复 无论如何,网站有分类,每个图片都有自己的页码;所以为了抓取每个图像,我需要进入每个类别,然后进入特定类别的每个页面 下面是我的代码,但我无法使循环复位 const{Cluster}=require('puppeter-Cluster'); const puppeter=require('puppeter'); 设c=0; 设z=500; (异步()=

所以我找到了一个网站,它有非常酷的图片,我想搜集一些数据。该网站在大约5年内没有得到任何更新,我试图联系其所有者获取某种API,但没有得到任何回复

无论如何,网站有分类,每个图片都有自己的页码;所以为了抓取每个图像,我需要进入每个类别,然后进入特定类别的每个页面

下面是我的代码,但我无法使循环复位

const{Cluster}=require('puppeter-Cluster');
const puppeter=require('puppeter');
设c=0;
设z=500;
(异步()=>{
进程。setMaxListeners(5);
const cluster=等待cluster.launch({
maxConcurrency:3//max同时生成的浏览器
});
设b=20;
for(设i=0;i{
let browser=wait puppeter.launch({headless:false});
//使用i和c值的刮码
等待浏览器关闭();
控制台日志(i);
如果(i>b-10){
i=0;
c=c+1;
console.log('c='+c);
如果(c>z)
process.exit();
}
});
}
等待cluster.idle();
等待cluster.close();
})();
这是输出(不需要顺序):

1
0
2.
4.
3.
5.
6.
7.
8.
9
10
11
c=1
12
c=2
13
c=3
14
c=4
16
c=5
15
c=6
17
c=7
18
c=8
19
c=9
进程已完成,退出代码为0
如果我在
cluster.execute
前面添加
wait
,则
for循环将被重置,但我不能同时使用多个浏览器

编辑:

const{Cluster}=require('puppeter-Cluster');
const puppeter=require('puppeter');
(异步()=>{
进程。setMaxListeners(5);
const cluster=await cluster.launch({maxConcurrency:3});
设b=15;
让d;
函数myLoop(){
设g=0;
对于(g;g0)
myLoop();
异步函数myFunc(){
等待cluster.execute(异步()=>{
let browser=wait puppeter.launch({headless:false});
等待浏览器关闭();
});
}
等待cluster.idle();
等待cluster.close();
})();

我认为问题可能是由let引起的,let仅存在于当前代码块中,请尝试创建一个函数。类似于此

let i = 0; // page index
let n = 0; // number of pages 
let c = 0; // category index
let nc = 0; // number of categorys
for(i = 0; i < n; i++)
{
   for(c = 0; c < nc; c++)
   {
     postrequest(i,c)
   }
} 

postrequest(pageindex,categoryindex)
{
  // Do your async call ... 
}
let i=0;//页面索引
设n=0;//页数
设c=0;//类别索引
设nc=0;//类别数
对于(i=0;i

对不起,如果我错过了这个问题……< /p>什么是重置< <代码> > <代码>循环?如果你在迭代过程中发现一个你想迭代的类别,你不能只是递归地这样做吗?我认为它不足以满足我的工作流程,因为我必须去不同的页面来找到隐藏的类别——这些都是基于该页上显示的图像。我可能在第6页找到该类别,而在其他情况下,它可能在第40页。例如,我在“玻璃”类别中。在这一类别中,我可以找到一个带有“一杯水”的图像。图像下方显示的另一个类别是“水”,然后我继续刮除该类别。这就是为什么我需要eset for循环,因为页面如下所示:webpage.com/cat=1/pg=1什么是“重置循环”?这不是一个标准的编程术语。如果要中止循环,通常需要
中断
返回
,然后代码可以使用正确的配置启动新的循环。我想说的是,我希望
I
值返回到
0
,以便
for loop
可以停止再次rt。我很抱歉这些不好的术语或解释,但英语不是我的母语。看起来你有一个异步
cluster.execute()
在循环没有等待的循环内部,因此循环已经走得很远很远了。您可能需要提示并等待它,使循环等待它,因此如果在执行时您想将
i
设置回
0
,那么循环就不会执行循环的所有其余部分。