Javascript:如何在不同的线程中运行异步函数?

时间:2019-09-17 05:23:59

标签: javascript async-await

我有一个异步函数,可以在我的js代码中返回一个promise,如下所示;

async launch(){
  return new Promise (function(resolve, reject){
    let opts = {
      headless: false,
      defaultViewport: null,
      args: ['--start-maximized'],
      slowMo: 1,
      timeout: 10000
    };
    puppeteer
      .launch(opts)
      .then(function (browser) {    
        resolve(browser);
      });
  });
}

它通过使用puppeteer启动新的浏览器页面。

用法:

var browserLauncher = new BrowserLauncher();
var browser = await browserLauncher.launch();
var page = await browser.newPage();

因此,我想同时在不同的线程中启动5个浏览器。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以await PromisePromise.all多个。请参见下面的示例:

function performTask(message, timeout) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`Completed ${message}`);
    }, timeout);
  });
}

(async () => {
  const allTasks = [
    performTask('first', 500),
    performTask('second', 100),
    performTask('third', 200),
  ];

  await Promise.all(allTasks);
})();

在您的示例中,您可以像这样用async方法包装动作:

async function launchBrowser(options) {
  var browserLauncher = new BrowserLauncher();
  var browser = await browserLauncher.launch();
  var page = await browser.newPage();
}

await Promise.all([
  launchBrowser({ /* options */ }),
  launchBrowser({ /* options */ }),
  launchBrowser({ /* options */ }),
  launchBrowser({ /* options */ }),
  launchBrowser({ /* options */ }),
]);