猿问

JavaScript:变量在等待中未定义

我在下面有一个代码片段,我的问题是我在 page.evaluate() 内部收到一条错误消息是未定义的,而我在一开始url就明确定义了 const 。url我对 JS 中的变量范围不是很熟悉,我可以知道为什么会出现此错误以及如何解决它?


const puppeteer = require('puppeteer');

const url = "https://stackoverflow.com/";


function run () {

    return new Promise(async (resolve, reject) => {

        try {

            const browser = await puppeteer.launch();

            const page = await browser.newPage();

            await page.goto(url);

            

            let temp = await page.evaluate(() => {

                let metaTag = document.querySelector('head > [name="description"]');

                const output = url + ": " + metaTag.getAttribute('content');

                return output;

            })


            browser.close();

            return resolve(temp);

        } catch (error) {

            return reject(error)

        }

    })

}


run().then(console.log).catch(console.error);


哈士奇WWW
浏览 168回答 1
1回答

繁花不似锦

这不是您对 JS 中变量范围的理解的问题。page.evaluate只是行为不正常,因为该函数是在页面上下文而不是定义它的上下文中计算的。如果要将数据传递给它,请将其作为参数:let temp = await page.evaluate((url) => {    // ...}, url)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答