如何在 node js 中执行类似于 goto 语句的内容,或者如何在异步函数中创建和调用函数?

How to execute something similar to a goto statement in node js or how to create and call a function within an asynchronous function?

我是 运行 通过 puppeteer 进行的自动化测试,它会填写表格并检查验证码。如果验证码不正确,它会刷新为一个新图像,但我需要再次处理整个图像并达到之前用于处理它的功能。

(async function example() {
  const browser = await puppeteer.launch({headless: false})
  const page = await browser.newPage()

  /*-----------NEED TO COME BACK HERE-----------*/
  const tessProcess = utils.promisify(tesseract.process);
  await page.setViewport(viewPort)
  await page.goto('http://www.example.com')
  await page.screenshot(options)
  const text = await tessProcess('new.png');
  console.log(text.trim());
  await page.$eval('input[id=userEnteredCaptcha]', (el, value) => el.value = value, text.trim())
  await page.$eval('input[id=companyID]', el => el.value = 'val');
  const submitBtn = await page.$('[id="data"]');
  await submitBtn.click();


  try {
   var x =  await page.waitFor("#msgboxclose");
    console.log("Captcha error")
}
catch (e) {
    console.error('No Error');
}
if(x){
  await page.keyboard.press('Escape');

  /*---------GO FROM HERE--------*/
}

})()

我想创建一个循环,以便在验证码错误时再次处理图像

声明一个布尔变量,指示您是否需要重试,并将重复的功能放在检查该变量的 while 循环中。如果循环结束时的 x 条件不满足,则将 tryAgain 设置为 false,这样就不会发生进一步的迭代:

(async function example() {
  const browser = await puppeteer.launch({headless: false})
  const page = await browser.newPage()
  let tryAgain = true;  // <--------------------------
  while (tryAgain) {    // <--------------------------
    /*-----------NEED TO COME BACK HERE-----------*/
    const tessProcess = utils.promisify(tesseract.process);
    await page.setViewport(viewPort)
    await page.goto('http://www.example.com')
    await page.screenshot(options)
    const text = await tessProcess('new.png');
    console.log(text.trim());
    await page.$eval('input[id=userEnteredCaptcha]', (el, value) => el.value = value, text.trim())
    await page.$eval('input[id=companyID]', el => el.value = 'val');
    const submitBtn = await page.$('[id="data"]');
    await submitBtn.click();


    try {
      var x =  await page.waitFor("#msgboxclose");
      console.log("Captcha error")
    }
    catch (e) {
      console.error('No Error');
    }
    if(x){
      await page.keyboard.press('Escape');
      /*---------GO FROM HERE--------*/
    } else {
      tryAgain = false;   // <--------------------------
    }
  }

})()