【问题标题】:How to pass array inputs as parameter to async function?如何将数组输入作为参数传递给异步函数?
【发布时间】:2021-07-16 15:01:49
【问题描述】:

我从 txt 文件 [我在本地拥有的] 中获得了一组 url,我使用以下代码作为数组输入获得了这些 url

fs.readFile('urls.txt', function(err, data) {
    if(err) throw err;
    var testurls = data.toString().split("\n");  
});

执行 console.log(testurls) 时的示例输出 [ 'https://sample1.com' 'https://sample2.com' ]

当我尝试使用 Lighthouse 进行一些性能测试时,如何将值作为参数/参数传递给下面的函数以对每个 url 依次运行扫描?

async function nav_to_site() {
    const home_url = testurls;
    const browser = await puppeteer.launch({
        headless: true,
        defaultViewport: null,
        executablePath: '/usr/local/bin/chromium',
        args: ['--headless', '--no-sandbox', '--remote-debugging-port=9222', '--disable-gpu'],
    });

(async () => {
    let browser = null;
    let page = null;

    try {
        browser = await nav_to_site();
        console.log('Running lighthouse...');
        page = (await browser.pages())[0];
        const report = await lighthouse(page.url(), {
            port: 9222,
            output: 'json',
            logLevel: 'info',
            disableDeviceEmulation: true,
            budgetPath: 'budget.json',
            chromeFlags: ['--disable-gpu', '--no-sandbox', '--disable-storage-reset']
        }, config);
        const json = reportGenerator.generateReport(report.lhr, 'json');
        const html = reportGenerator.generateReport(report.lhr, 'html');

}

【问题讨论】:

  • 你应该edit你的问题,或者问另一个,如果答案对你不起作用。

标签: javascript node.js arrays function async-await


【解决方案1】:

简单的方法?使用fs.readFileSync() 加载该文本文件。

更难,但如果文件很大更好?承诺读取文件,以便您可以使用await 调用它。然后使用循环来做你的木偶操作。

const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);

async function getUrlsFromFile {
  const contents = await readFile('urls.txt');
  return lines.toString().split('\n')
}

async function nav_to_all_sites_one_by_one() {
    testurls = await getUrlsFromFile()
    /* avoid forEach here */
    for (let testurl of testurls) {
      const browser = await puppeteer.launch({
        headless: true,
        defaultViewport: null,
        executablePath: '/usr/local/bin/chromium',
        args: ['--headless', '--no-sandbox', '--remote-debugging-port=9222', '--disable-gpu'],
      });

      console.log('Running lighthouse on', testurl);
      page = (await browser.pages())[0];
      const report = await lighthouse(page.url(), {
            port: 9222,
            output: 'json',
            logLevel: 'info',
            disableDeviceEmulation: true,
            budgetPath: 'budget.json',
            chromeFlags: ['--disable-gpu', '--no-sandbox', '--disable-storage-reset']
        }, config);
      const json = reportGenerator.generateReport(report.lhr, 'json');
      const html = reportGenerator.generateReport(report.lhr, 'html');
    }
}

【讨论】:

  • 你好琼斯,尝试使用上面的代码并得到以下错误 UnhandledPromiseRejectionWarning: LHError: INVALID_URL 错误,同时执行上面的代码。这不是从 urls.txt 文件中正确读取带有 https 的 url 内容吗?请帮忙
猜你喜欢
  • 2017-12-22
  • 2020-12-27
  • 2020-12-23
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
相关资源
最近更新 更多