Давать тайм-аут после оценки в кукловод не работает - PullRequest
0 голосов
/ 03 июля 2018

У меня есть страница, которая содержит несколько визуализаций. Я должен оценить и изменить размеры графиков. во время оценки для изменения размера требуется несколько секунд. Раньше я делал это с помощью фантома. Я использую, чтобы дать тайм-аут в функции обратного вызова, и он работал отлично. Я пытаюсь сделать то же самое, используя кукловода, который не работает. Не работает в том смысле, что изменение размера не произошло даже после тайм-аута.

образец кода кукловода (не работает)

const puppeteer = require('puppeteer');
const fs = require('fs');

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
(async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setViewport({ width: 2048, height: 1024 });


    await page.goto("http://localhost:3000", { timeout: 180000 });

    await timeout(5000);
    page.on('console', msg => console.log('PAGE LOG:', msg.text()));
    await page.evaluate(function() {
            for (var i = 0; i < $('.react-grid-item').length; i++) {
                $('.react-grid-item:eq(' + i + ')').css({
                    position: 'absolute',
                    height: '300px',
                    width: '100%',
                    top: (i * 300) + 'px',
                    left: '0px'
                })
            }
        })
        .then(function() {
            setTimeout(function() {
                page.pdf({
                    path: 'test' + new Date() + '.pdf',
                    // height: 7777,
                    // width: 2048,
                    format: 'a4',
                    displayHeaderFooter: false,
                    margin: {
                        top: "75px",
                        bottom: "75px"
                    }
                });
                // console.log(sum);
            }, 5000);
        }).catch(function(err) {
            console.error(err);
        })

})();

1 Ответ

0 голосов
/ 03 июля 2018

используя await/async попробуйте выполнить следующее:

await page.evaluate((a, b) => {
    return a + b
  }, 1, 2).then((sum) => {
    setTimeout(() => {
      console.log(sum)
    }, 2000)
})
...