【问题标题】:NodeJS Wait for function in for loop to finish before continuingNodeJS在继续之前等待for循环中的函数完成
【发布时间】:2020-02-24 22:01:25
【问题描述】:

我基本上有这个 for 循环,它运行一个打开 puppeteer 窗口并转到链接的函数,但是,我希望这个按顺序完成,因为现在所有 puppeteer 窗口同时打开。

这是循环:

for(var i=0; i < 3; i++){
  if (i != 0){
    enter();
  }
}

这是我的函数输入

async function enter(){

   browser = await puppeteer.launch({headless: false});
   page = await browser.newPage();
   await page.goto(url);

}

现在,如果我要运行该代码,会打开 2 个 puppeteer 窗口,但我希望打开 1 个,转到链接,然后打开下一个并转到链接,依此类推...

感谢任何帮助

【问题讨论】:

  • 您是否熟悉一般的异步功能(promise、async/await、回调等)?如果您将 nodejs 用于 hello world 以外的任何东西,我强烈建议您找到一些快速教程,因为这将继续影响您

标签: node.js for-loop asynchronous


【解决方案1】:

您没有在等待您的enter 电话,这就是它没有等待的原因。你需要等待它。

for(var i=0; i < 3; i++){
  if (i != 0){
    await enter();
  }
}

【讨论】:

    【解决方案2】:

    你需要将你的循环包装成一个异步函数和await 每个enter() 调用:

    async function openWindows() {
      for(var i=0; i < 3; i++){
        if (i != 0){
          await enter();
        }
      }
    }
    

    【讨论】:

    • 不幸的是,我的循环比我只是将它简化为一个示例要复杂一些,并且我无法将整个循环放入异步函数中,因为那时我调用 await enter();它抛出错误:“等待仅在异步函数中有效”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2021-12-26
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多