我是现代javascript中的新手。我知道总体上有很多与此相关的问题,但是在这个问题中,我正在寻找一种模板,用于思考如何采用单个函数并将其重写为数组上的映射。
我从here开始使用一个非常简单的屏幕截图功能:
const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser => {
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'screenshot.png'});
await browser.close();
});
这只是一个屏幕截图。我想给它一个数组,并让它获取多个屏幕截图。
对于我的应用程序,我使用mypage变量对其进行了一些微调:
const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser => {
const mypage = 1
const page = await browser.newPage();
await page.goto(`https://localhost:9001/${mypage}`);
await page.screenshot({path: `${mypage}.png`});
await browser.close();
});
现在,我想在mypages = [1 ... 1000]上参数化此列表。在较旧的javascript中,使用underscore.js,我会尝试类似的操作:
// define the function
function ss(mypage) {
puppeteer.launch().then(async browser => {
const page = await browser.newPage();
await page.goto(`https://localhost:9001/${mypage}`);
await page.screenshot({path: `${mypage}.png`});
await browser.close();
});
}
// populate the array of pages, eg make var mypages = [1,2,3...1000]
var mypages = [];
for (var i = 1; i <= 1000; i++) {
mypages.push(i);
}
// call the screenshot function on each page in my pages.
_.each(mypages, ss)
我不清楚如何使用async / await处理mypages中的每个页面(并可能更惯用地生成此数组)。
如何重写适用于mypage = 1的puppeteer函数,以映射整个mypages数组?
答案 0 :(得分:2)
屏幕截图功能应该是异步的:
-3600000
0
0
然后一个接一个地截图:
c.setTimeZone(TimeZone.getTimeZone("GMT"));
或全部同时(不确定是否可行)
async function screenshot(mypage) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(`https://localhost:9001/${mypage}`);
await page.screenshot({path: `${mypage}.png`});
await browser.close();
}